MFC自動關閉對話框(MessageBoxTimeout)
記錄一下今天在界面開發中的解決方案。自動關閉對話框有兩種方案:
1.使用定時器實現延遲關閉(DeepSeek方案)
提示框顯示幾秒后自動關閉,可以使用 SetTimer + KillTimer:
// 在對話框類中添加:
void CMyDialog::OnBnClickedOk()
{YourFunction(); // 執行你的邏輯// 彈出提示框MessageBox(_T("操作完成,3秒后自動關閉"), _T("提示"), MB_OK | MB_ICONINFORMATION);// 設置定時器(3秒后關閉)SetTimer(1, 3000, NULL); // 3000ms = 3秒
}// 處理 WM_TIMER 事件
void CMyDialog::OnTimer(UINT_PTR nIDEvent)
{if (nIDEvent == 1){KillTimer(1); // 停止定時器EndDialog(IDOK); // 關閉對話框}CDialogEx::OnTimer(nIDEvent);
}
2.使用Windows API:MessageBoxTimeout
方案一的確可以解決項目上的問題,但是目前的界面開發中已經使用了一個定時器進行主對話框的關閉,因此,我想找一個簡單便捷的方式。該API是由user32.dll導出。
建立一個頭文件MessageBoxTimeout.h,或者直接將一下代碼添加到需要使用的cpp文件中。
extern "C"
{int WINAPI MessageBoxTimeoutA(IN HWND hWnd, IN LPCSTR lpText, IN LPCSTR lpCaption, IN UINT uType, IN WORD wLanguageId, IN DWORD dwMilliseconds);int WINAPI MessageBoxTimeoutW(IN HWND hWnd, IN LPCWSTR lpText, IN LPCWSTR lpCaption, IN UINT uType, IN WORD wLanguageId, IN DWORD dwMilliseconds);
}#ifdef UNICODE
#define MessageBoxTimeout MessageBoxTimeoutW
#else
#define MessageBoxTimeout MessageBoxTimeoutA
#endif
使用案例:
// 設置1000ms自動關閉該提示對話框
MessageBoxTimeout(NULL, _T("制作完成!"), _T("提示"), MB_ICONINFORMATION, 0, 1000);