MFC App,主窗口为无模式对话框

时间:2011-06-28 08:33:53

标签: visual-c++ mfc dialog modeless

我正在开发一个MFC应用程序并将其导出到dll中。应用程序只有一个窗口,我希望该窗口无模式。在InitInstance()中,如果我想要它是模态的,我只需要这样做:

AFX_MANAGE_STATE(AfxGetStaticModuleState());
CUIWelcomeDlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
    // TODO: Place code here to handle when the dialog is
    //  dismissed with OK
}
else if (nResponse == IDCANCEL)
{
    // TODO: Place code here to handle when the dialog is
    //  dismissed with Cancel
}
return false;

它作为模态工作得很好。这是无模式的代码:

AFX_MANAGE_STATE(AfxGetStaticModuleState());
CUIWelcomeDlg * dlg;
dlg=new CUIWelcomeDlg();
m_pMainWnd=dlg;
if(dlg!=NULL) {
    dlg->Create(IDD_UIWELCOME_DIALOG,NULL);
    dlg->ShowWindow(SW_SHOW);
} 
return true;

我试着调试它。它很好,直到它返回真实;之后,对话框窗口冻结并且没有响应。有谁知道如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

尝试删除以下行:
     m_pMainWnd = dlg;

(如果dlg是这里的指针,你应该把它称为pdlg)。

答案 1 :(得分:0)

您需要实现自己的无限循环。当然,您不希望阻止UI线程响应,因此您需要在此循环内捕获和分派消息。尝试在ShowWindow之后添加它:

MSG msg;

// Handle dialog messages
while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
    if(!IsDialogMessage(&msg))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);  
    }
}