从模式对话框中退出MFC应用程序

时间:2017-03-15 08:51:10

标签: c++ mfc

我在模态对话框中,在模式对话框结束时,我想退出应用程序。

ASSERT(AfxGetApp()->m_pMainWnd != NULL);
PostMessage(WM_CLOSE, 0, 0);

但是,获得以下异常会形成模式的私有成员变量的成员方法:

Exception thrown: read access violation.

有没有办法安全关闭ModalDialog的应用程序?

3 个答案:

答案 0 :(得分:2)

为了显示对话框,您可以从应用程序中调用DoModal()。

您可以在调用DoModal();

之后退出应用程序
dlg.DoModal();
//write code to exit application

您可以检查DoModal()的返回值并相应地退出应用程序。

答案 1 :(得分:0)

在您的CYouModal :: OnDestroy()处理程序中,使用WM_CLOSE id为主窗口调用PostMessage。你试过吗?

答案 2 :(得分:0)

您询问如何从对话框中发布WM_CLOSE以结束您的应用程序。 如果这种方式可以安全地关闭ModalDialog的应用程序。

是的,但您必须在关闭对话框之前将WM_CLOSE发布到MainWnd。 MainWnd必须处理应用程序的退出。

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
    ON_BN_CLICKED(IDOK, &CAboutDlg::OnBnClickedOk)
END_MESSAGE_MAP()

void CAboutDlg::OnBnClickedOk()
{
    ASSERT(AfxGetApp()->m_pMainWnd != NULL);
    AfxGetApp()->m_pMainWnd->PostMessage(WM_CLOSE, 0, 0);
    CDialogEx::OnOK();
}