MFC调用对话框dll弹出非模态对话框


思路:
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

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值