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

MFC 對話框關閉時提示儲存修改的文檔

     編輯:程式設計疑難解答

需求

使用者嘗試關閉對話框程式時,若文檔已修改,提示「是否儲存?」;選「否」則取消關閉,回到主介面。

實作:重寫 OnClose

void CMyDialog::OnClose() {
    if (m_bModified) { // 文檔修改旗標
        int ret = MessageBox(_T("文檔已修改,是否儲存?"), _T("提示"), 
                             MB_ICONQUESTION | MB_YESNOCANCEL);
        if (ret == IDCANCEL) {
            return; // 取消關閉
        } else if (ret == IDYES) {
            if (!SaveDocument()) { // 儲存失敗
                MessageBox(_T("儲存失敗!"), _T("錯誤"), MB_ICONERROR);
                return; // 不關閉
            }
        }
        // IDNO 直接關閉不儲存
    }
    CDialogEx::OnClose(); // 呼叫基類完成關閉流程
}

關鍵點

  • 使用 MB_YESNOCANCEL 提供三選項:是(儲存)、否(不儲存關閉)、取消(不關閉)。
  • 儲存邏輯封裝在 SaveDocument() 回傳 BOOL 表示成敗。
  • 若為 SDI/MDI 架構,框架會自動呼叫 CDocument::SaveModified(),無需手動處理。

進階:攔截系統關閉按鈕

OnClose 會處理標題列「×」、Alt+F4、工作列右鍵關閉等所有關閉來源,無需額外攔截 WM_SYSCOMMAND。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved