思路:
1、新建基于MFC的DLL,在DLL中做一个导出函数,在该导出函数中new出对话框类,导致函数返回CWnd*也就是new出来的窗口实例指针。如下
CWnd * InitData( CWnd * pWnd
/*父窗口指针,由调用者传入,一般是主对话框*/
)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CDlgCKTD * pDlg =
new
CDlgCKTD;
if
( pDlg->Create( CDlgCKTD::IDD,CWnd::FromHandle( pWnd->GetSafeHwnd() ) ) )
{
pDlg->SetParent( pWnd );
pDlg->ShowWindow( SW_SHOW );
return
pDlg;
}
return
NULL;
}
2、在主对话框中加载动态库并调用导出函数,获取DLL中的子窗口句柄,然后进行显示,移动位置等操作。
void CMainFrame::Load(CString strModuleName,CString strTitle,LPARAM lParam/* = 0*/ )
{
//判断选项卡个数是否超过设定
CIni ini;
if( m_wndTab.GetItemCount() >= (int)ini.GetInt( _T("system"),_T("maxtabs"),10 ) )
{
_STARTPROMPT;
if( StartPrompt ) StartPrompt( PROMPT_TYPE_POPUP,_T("选项卡过多,请关闭某些选项卡后再尝试打开!"),0x0000ff,PROMPT_POS_TOP_CENTER,this,NULL,FALSE );
return;
}
HMODULE hDll = LoadLibrary( strModuleName );
if( hDll )
{
typedef CWnd * ( * INTIDATA)(CWnd *);
INTIDATA InitData = (INTIDATA)GetProcAddress( hDll,"InitData" );
if( InitData )
{
unsigned int uVersion = 0;
CWnd * pWnd = InitData( GetActiveView() );
if( pWnd )
{
pWnd->ShowWindow( SW_SHOWNORMAL );
pWnd->UpdateWindow();
}
}
}
}
转载出处:http://bbs.csdn.net/topics/390948839