<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);
相关推荐
君鼎41 分钟前
Effective C++ 条款55:熟悉Boost库
c++
Zafir20242 小时前
Qt实现TabWidget通过addTab函数添加的页,页内控件自适应窗口大小
开发语言·c++·qt·ui
阿巴~阿巴~2 小时前
深入解析C++非类型模板参数
开发语言·c++
多吃蔬菜!!!2 小时前
vscode 搭建C/C++开发环境搭建(linux)
linux·c语言·c++
小指纹5 小时前
河南萌新联赛2025第(六)场:郑州大学
java·开发语言·数据结构·c++·算法
岁忧5 小时前
(nice!!!)(LeetCode 每日一题) 1277. 统计全为 1 的正方形子矩阵 (动态规划)
java·c++·算法·leetcode·矩阵·go·动态规划
咔咔咔的5 小时前
679. 24 点游戏
c++
the sun345 小时前
Reactor设计模式及其在epoll中的应用
linux·运维·服务器·c++
Davis_12196 小时前
代码随想录算法训练营27天 | 56. 合并区间、738.单调递增的数字、968.监控二叉树(提高)
数据结构·c++·算法·leetcode·贪心算法
闻缺陷则喜何志丹6 小时前
【倍增 桶排序】后缀数组
c++·算法·倍增·桶排序·后缀数组·lcp·后缀树