如何处理关闭MessageBox 我的环境是C++、MFC、WM 6 +设备的紧凑框架。
在许多地方,我使用“MessageBox()”显示弹出消息,以给出一个简单的警告或从用户处获得是/否响应。我想做的是,无论何时关闭任何消息,在执行特定代码之前,调用一些公共函数 我在父窗口中尝试了WM_SHOWWINDOW,但似乎没有出现 如有任何建议,将不胜感激如何处理关闭MessageBox 我的环境是C++、MFC、WM 6 +设备的紧凑框架。,c++,mfc,compact-framework,C++,Mfc,Compact Framework,在许多地方,我使用“MessageBox()”显示弹出消息,以给出一个简单的警告或从用户处获得是/否响应。我想做的是,无论何时关闭任何消息,在执行特定代码之前,调用一些公共函数 我在父窗口中尝试了WM_SHOWWINDOW,但似乎没有出现 如有任何建议,将不胜感激 [补充]我的屏幕上有许多按钮,我必须确保只有一个按钮始终处于对焦状态。当我显示消息框时,按钮似乎失去了焦点,所以我想在消息关闭时将其重新聚焦。当然,我可以在使用消息的每个地方都这样做,但我正在寻找更好的方法来处理这种情况。您可以尝试在
[补充]我的屏幕上有许多按钮,我必须确保只有一个按钮始终处于对焦状态。当我显示消息框时,按钮似乎失去了焦点,所以我想在消息关闭时将其重新聚焦。当然,我可以在使用消息的每个地方都这样做,但我正在寻找更好的方法来处理这种情况。您可以尝试在父窗口中拦截消息。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
}
}
更多信息请点击此处:
谢谢您的评论。由于某些原因,在我的环境(mfc、windows mobile)中无法使用。感谢您的评论。也许我可以扩展MessageBox并向家长发送一条用户定义的消息,以便家长关注其中一个按钮?是的,使用WM_用户消息和wparam应该是可行的,lparam认为我自己还没有尝试过。为什么不直接调用
SetFocus
?我也相信焦点应该自动恢复;事实上,它并没有暗示窗口处理消息的方式有问题,也许…@tenfour,是的,我想知道为什么当消息弹出时,我的屏幕会失去焦点。