首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

MFC 兩個對話框互斥顯示:彈出 B 後關閉 A,在 A 的按鈕處理器中 DoModal B 再 EndDialog A

     編輯:程式設計綜合問答

需求:點擊對話框 A 的按鈕彈出 B,A 自動關閉,始終只有一個對話框可見。

代碼實現

void CMyDialogA::OnBnClickedButtonOpenB() {
    CMyDialogB dlgB;
    // 先隱藏/結束 A
    EndDialog(IDOK);  // 或 DestroyWindow() 若是非模態
    // 再彈出 B(模態)
    dlgB.DoModal();
    // B 關閉後可選擇重新顯示 A 或結束程序
}

關鍵點

  • `EndDialog` / `DestroyWindow` 必須在 `DoModal` **之前**調用,否則兩個模態對話框會疊加(Windows 不允許同線程兩個模態循環並行)。
  • 若 A、B 都是非模態 (`Create`),則 `ShowWindow(SW_HIDE)` 隱藏 A,`ShowWindow(SW_SHOW)` 顯示 B。
  • 若需來回切換,建議用 **Property Sheet (CPropertySheet)** 多頁籤模式,或單文檔多視圖 (SDI) 架構。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved