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

MFC 視窗程式關閉提示儲存:重寫 OnClose 實現

     編輯:程式設計疑難解答

需求

MFC 程式退出時,若文檔已修改,提示「是否儲存?」,選「否」則取消關閉回到主介面。

實作:ClassWizard 新增 OnClose

void CMyDialog::OnClose() {
    if (m_bDocModified) {
        int nRet = MessageBox(_T("文檔已修改,確定退出而不儲存嗎?"), _T("提示"), 
                              MB_ICONQUESTION | MB_YESNO);
        if (nRet == IDNO) {
            return; // 使用者選「否」,直接返回,不關閉視窗
        }
        // 選「是」繼續執行基類關閉流程(可在此先呼叫 SaveDocument())
    }
    CDialog::OnClose(); // 呼叫基類完成銷毀
}

關鍵點

  • MB_YESNO 只有「是/否」兩鈕,若需「取消」選項改用 MB_YESNOCANCEL。
  • 文檔修改旗標 m_bDocModified 需在編輯操作時設為 TRUE,儲存後重設為 FALSE。
  • SDI/MDI 架構下,框架自動呼叫 CDocument::SaveModified(),無需手寫 OnClose。

進階:攔截 WM_CLOSE 訊息

若需在視窗關閉前執行非同步儲存,可在 OnClose 中啟動背景執行緒,完成後 PostMessage(WM_CLOSE) 再次觸發關閉。

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