0

我的环境是 C++、MFC、WM 6.0+ 设备的紧凑框架。

在许多地方,我使用“MessageBox()”显示弹出消息,以提供简单的警告或从用户那里获得是/否的回复。我想要做的是,每当关闭任何消息时,在执行特定代码之前调用一些常用函数。

我在父窗口中尝试了 WM_SHOWWINDOW 但它似乎没有发生。

任何建议将不胜感激。

[已添加] 我的屏幕有很多按钮,我必须确保始终只有一个按钮处于焦点。当我显示消息框时,按钮似乎失去了焦点,所以我想在消息关闭时将其重新聚焦。当然,我可以在使用消息的每个地方都这样做,但要寻找一种更好的方法来处理这种情况。

4

2 回答 2

1

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

于 2012-09-03T04:20:33.040 回答
0

您可以尝试在父窗口中拦截WM_ACTIVATE消息。

于 2012-09-03T04:16:36.873 回答