关于DLL中显示非模式对话框问题
我首先建立了一个以对话框为基础的应用程序,我需要根据要求调用DLL中的对话框,但我希望在DLL中的对话框为非模式对话框,然后动态调用DLL
如下:
extern "C" __declspec( dllexport ) void MyDllTest()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CDllDlg *dlg = new CDllDlg;
dlg->Create(IDD_DLG);
dlg->ShowWindow(SW_SHOW);
}
然后动态调用DLL,程序运行出错
后来我在主程序中添加一个CWinThread线程类然后在线程中启动DLL,而这时候我在DLL中如下作:
BEGIN_MESSAGE_MAP(CMchdllApp, CWinApp)
END_MESSAGE_MAP()
// CMchdllApp 构造
CMchdllApp::CMchdllApp()
{
// TODO: 在此处添加构造代码,
// 将所有重要的初始化放置在 InitInstance 中
}
// 唯一的一个 CMchdllApp 对象
CMchdllApp theApp;
// CMchdllApp 初始化
BOOL CMchdllApp::InitInstance()
{
CWinApp::InitInstance();
CDllDlg dlg;
dlg.DoModal();
return TRUE;
}
extern "C" __declspec( dllexport ) HWND MyDllTest()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return(theApp.m_pMainWnd->GetSafeHwnd());
}
这样作,相当于另外启动一个程序吧?但是两个对话框切换时仍然有些不正常的现象
请问高手们,有没有更好的方法在DLL中显示对话框,而且可以同时操作主程序对话框和DLL对话框,并且两个对话框之间可以通讯.
如果我这种方法也可以成功的话请问,我缺少了什么东西,我该注意什么?