思路:
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
本文介绍如何通过MFC DLL导出一个对话框,并在主应用程序中加载和使用该对话框。具体步骤包括创建DLL及导出函数、在主程序中加载DLL并调用导出函数。

9309

被折叠的 条评论
为什么被折叠?



