我在网上看到 可以在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 中 也是如此请问:是何原因?谢谢

解决方案 »

  1.   

    extern "C" __declspec(dllexport) void show(CWnd* m_ParentWnd)
    {
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    if(!bCreate){
    m_DllDlg.Create(IDD_DIALOG1);
    m_DllDlg.ShowWindow(SW_SHOW);
    bCreate=true;
    }
    }这样是可以的。
      

  2.   

    extern "C" __declspec(dllexport) void show(HWND hwnd)
    {
    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;
    }
    }也行!
      

  3.   

    搞不懂 m_DllDlg.Create(IDD_DLL_DIALOG,m_ParentWnd);

    CWnd *m_ParentWnd;
    m_ParentWnd=CWnd::FromHandle(hwnd);
    m_DllDlg.Create(IDD_DIALOG1,m_ParentWnd);
    有什么区别啊,而且 
    m_DllDlg.Create(IDD_DIALOG1);  //也可以,为什么一指定父窗体就有问题了了