使用者嘗試關閉對話框程式時,若文檔已修改,提示「是否儲存?」;選「否」則取消關閉,回到主介面。
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 表示成敗。CDocument::SaveModified(),無需手動處理。OnClose 會處理標題列「×」、Alt+F4、工作列右鍵關閉等所有關閉來源,無需額外攔截 WM_SYSCOMMAND。