<C++> MFC自动关闭对话框(MessageBoxTimeout)
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);