我的环境是适用于WM 6.0+设备的C ++,MFC,紧凑框架。
在很多地方,我使用'MessageBox()'显示弹出消息,以提供简单警告或从用户获得是/否回复。我想要做的是,无论何时关闭任何消息,在执行特定代码之前调用一些常用函数。
我在父窗口中尝试了WM_SHOWWINDOW,但似乎没有发生。
任何建议都将受到赞赏。
[已添加]我的屏幕有很多按钮,我必须确保只有一个按钮一直聚焦。当我显示消息框时,按钮似乎松开了焦点,因此我想在消息关闭时将其集中回来。当然,我可以在每个使用消息的地方都这样做,但是寻找更好的方法来处理这种情况。
答案 0 :(得分: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
答案 1 :(得分:0)
您可以尝试拦截父窗口中的WM_ACTIVATE消息。