如何处理关闭MessageBox 我的环境是C++、MFC、WM 6 +设备的紧凑框架。

如何处理关闭MessageBox 我的环境是C++、MFC、WM 6 +设备的紧凑框架。,c++,mfc,compact-framework,C++,Mfc,Compact Framework,在许多地方,我使用“MessageBox()”显示弹出消息,以给出一个简单的警告或从用户处获得是/否响应。我想做的是,无论何时关闭任何消息,在执行特定代码之前,调用一些公共函数 我在父窗口中尝试了WM_SHOWWINDOW,但似乎没有出现 如有任何建议,将不胜感激 [补充]我的屏幕上有许多按钮,我必须确保只有一个按钮始终处于对焦状态。当我显示消息框时,按钮似乎失去了焦点,所以我想在消息关闭时将其重新聚焦。当然,我可以在使用消息的每个地方都这样做,但我正在寻找更好的方法来处理这种情况。您可以尝试在

在许多地方,我使用“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,是的,我想知道为什么当消息弹出时,我的屏幕会失去焦点。