MFC 程式退出時,若文檔已修改,提示「是否儲存?」,選「否」則取消關閉回到主介面。
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。CDocument::SaveModified(),無需手寫 OnClose。若需在視窗關閉前執行非同步儲存,可在 OnClose 中啟動背景執行緒,完成後 PostMessage(WM_CLOSE) 再次觸發關閉。