MFC对话框后未显示MessageBox

时间:2014-04-03 06:06:19

标签: c++ mfc

我在MFC对话框中有简单的MFC应用程序:

BOOL CPreparationApp::InitInstance()

{


    MyDlg Dlg;
    MessageBox(0, L"Text1", L"MessageBox caption", MB_OK);
    m_pMainWnd = &Dlg;
    Dlg.DoModal();
    CString strLine=Dlg.m_editText;

    MessageBox(0, L"Text2", L"MessageBox caption", MB_OK);

        return TRUE;
}

显示带有Text1的消息框,但是在模态对话框中按OK后没有显示带有Text2的消息框?为什么呢?

2 个答案:

答案 0 :(得分:2)

Dlg.DoModal();

这里称为模态窗口。在你关闭Dlg之前它不会返回。然后,TEXT2的MessageBox将显示出来。

或者,你可以编写如下来创建Dlg作为非模态窗口,如果它是从CDialog派生的

MyDlg *pDlg = new MyDlg;
pDlg->Create(IDD_MYDLG_DLG, NULL);
pDlg->ShowWindow(SW_SHOW);

哦,我没有看到它在CWinApp中。这是因为在将DoModal调用CWinApp :: m_pMainWnd引用的内容之后,WM_QUIT消息将被添加到消息队列中。然后创建的每个窗口都将退出。它是关于MFC如何破坏CWnd的。如果您需要更多,请阅读以下功能的MFC源代码。

int CWnd::RunModalLoop(DWORD dwFlags)
void CWnd::OnNcDestroy()
void CDialog::EndDialog(int nResult)

但是如果你只想要显示第二个框,只需删除它:

m_pMainWnd = &Dlg;

答案 1 :(得分:1)

通过将m_pMainWnd设置到对话框,您告诉MFC程序应该在对话框关闭时结束。不要那样做。