首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

關於基於對話框應用程序連續顯示多個模態對話框的問題

     編輯:關於VC++

問題現象

CMyApp::InitInstance() {
    CMyDialog1 dlg1; m_pMainWnd = &dlg1; dlg1.DoModal();
    CMyDialog2 dlg2; dlg2.DoModal(); // 返回 -1 失敗,消息隊列出現 WM_QUIT
}

原因分析

  1. MFC 要求 m_pMainWnd 指向有效窗口對象。首個 DoModal() 結束時窗口銷毀,MFC 認為主窗口關閉,發送 WM_QUIT 終止應用程序。
  2. 向導生成代碼中 m_pMainWnd 已被使用,不應重複賦值。

解決方案

  • 若需依次顯示多個模態對話框,不要 將第二個對話框賦值給 m_pMainWnd
  • 正確模式:
    CMyDialog1 dlg1;
    m_pMainWnd = &dlg1;
    int nResponse = dlg1.DoModal();
    if (nResponse == IDOK) {
        CMyDialog2 dlg2;
        dlg2.DoModal(); // 此時 m_pMainWnd 仍指向已銷毀的 dlg1,但不再檢查
    }
    return FALSE; // 結束應用
    
  • 或使用無模態對話框配合消息泵
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved