我在网上看到 可以在dll中调出对话框,但是通常都是 dlg.DoModal();【模式对话框】
我想使用非模式对话框, 如下
extern "C" __declspec(dllexport) void show(CWnd* m_ParentWnd)
{
if(!bCreate){
m_DllDlg.Create(IDD_DLL_DIALOG,m_ParentWnd);
m_DllDlg.ShowWindow(SW_SHOW);
bCreate=true;
}
}
但是在外面调用改该函数的时候,确发生错误,当注释掉 //m_DllDlg.ShowWindow(SW_SHOW);
就不会有问题,也就是能构创建成功,但是不能显示出来。其中我把 DllDlg 定义成全局的,而定义在CMyDllApp 中 也是如此请问:是何原因?谢谢
我想使用非模式对话框, 如下
extern "C" __declspec(dllexport) void show(CWnd* m_ParentWnd)
{
if(!bCreate){
m_DllDlg.Create(IDD_DLL_DIALOG,m_ParentWnd);
m_DllDlg.ShowWindow(SW_SHOW);
bCreate=true;
}
}
但是在外面调用改该函数的时候,确发生错误,当注释掉 //m_DllDlg.ShowWindow(SW_SHOW);
就不会有问题,也就是能构创建成功,但是不能显示出来。其中我把 DllDlg 定义成全局的,而定义在CMyDllApp 中 也是如此请问:是何原因?谢谢
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
if(!bCreate){
m_DllDlg.Create(IDD_DIALOG1);
m_DllDlg.ShowWindow(SW_SHOW);
bCreate=true;
}
}这样是可以的。
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
bCreate=FALSE;
if(!bCreate){
CWnd *m_ParentWnd;
m_ParentWnd=CWnd::FromHandle(hwnd);
m_DllDlg.Create(IDD_DIALOG1,m_ParentWnd);
m_DllDlg.ShowWindow(SW_SHOW);
bCreate=true;
}
}也行!
何
CWnd *m_ParentWnd;
m_ParentWnd=CWnd::FromHandle(hwnd);
m_DllDlg.Create(IDD_DIALOG1,m_ParentWnd);
有什么区别啊,而且
m_DllDlg.Create(IDD_DIALOG1); //也可以,为什么一指定父窗体就有问题了了