如何处理关闭MessageBox
How to handle closing MessageBox
我的环境是C++,MFC,用于WM 6.0+设备的紧凑框架。
在许多地方,我使用"MessageBox()"显示弹出消息,以给出简单的警告或从用户那里获得"是/否"回复。我想做的是,无论何时关闭任何消息,在执行特定代码之前,都要调用一些常见函数。
我在父窗口中尝试了WM_SOWWINDOW,但似乎没有成功。
任何建议都将不胜感激。
[添加]我的屏幕上有很多按钮,我必须确保始终只有一个按钮聚焦。当我显示消息框时,按钮似乎失去了焦点,所以当消息关闭时,我想把它放回焦点。当然,我可以在每个使用消息的地方都这样做,但我正在寻找更好的方法来处理这种情况。
MessageBox函数在关闭时返回特定的返回代码,您可以包装MessageBox函数并检查返回值,并在此基础上运行一些代码。
以下是MSDN的返回代码:
IDABORT 3 The Abort button was selected.
IDCANCEL 2 The Cancel button was selected.
IDCONTINUE 11 The Continue button was selected.
IDIGNORE 5 The Ignore button was selected.
IDNO 7 The No button was selected.
IDOK 1 The OK button was selected.
IDRETRY 4 The Retry button was selected.
IDTRYAGAIN 10 The Try Again button was selected.
IDYES 6 The Yes button was selected.
因此,以下代码可以用于基于返回代码运行不同的函数。
void MyMessageBox(wstring title,wstring message)
{
int msgboxID = MessageBox(
NULL,
(LPCWSTR)message.c_str(),
(LPCWSTR)title.c_str(),
MB_ICONWARNING | MB_CANCELTRYCONTINUE | MB_DEFBUTTON2
);
switch (msgboxID)
{
case IDCANCEL:
// TODO: add code
break;
case IDTRYAGAIN:
// TODO: add code
break;
case IDCONTINUE:
// TODO: add code
break;
//so on
}
}
更多信息请点击此处:http://msdn.microsoft.com/en-us/library/windows/desktop/ms645505(v=vs.85).aspx
您可以尝试在父窗口中拦截WM_ACTIVATE消息。
相关文章:
- 警告处理为错误这里有什么问题
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 使用流处理接收到的数据
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 基于多个条件处理地图中的所有元素
- 如何用数字处理log(0)
- SSL上的`curl_easy_send`和`curl_asy_recv`:如何处理`CURLE_AGAIN`
- 错误处理.将系统错误代码映射到泛型
- 从文本文件中读取时钟时间和事件时间并进行处理
- 在运行时处理类型擦除的数据-如何不重新发明轮子
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 用于矢量处理的多个线程
- 对字符串进行排序时,在c++中处理sort()
- 如何处理linux终端中带有负号(-)的C++中的命令行参数
- 处理除以零会导致<csignal>意外行为
- 内部异常处理程序,MessageBox()成功返回IDOK,但从未显示
- 如何处理关闭MessageBox