尝试在Windows 7中的任务栏缩略图中使用关闭按钮关闭窗口时启用“是否要保存”-dialog(启用了aero peek)。
处理WM_CLOSE时使用MessageBox()不起作用。直到您将鼠标光标移动到缩略图之外才会显示MessageBox,因此禁用了aero peek。
许多应用程序都有这种错误的行为,所以它可能是Windows 7中的一个设计缺陷,但对于某些程序它可以工作(Word,Notepad,Visual Studio,...),所以我想知道他们正在使用什么技巧(或以编程方式“退出”aero peek-mode所需的内容。
Windows 7附带的小型“录音机”应用程序存在同样的问题(如果您录制了一些未保存的内容并尝试使用缩略图关闭按钮关闭它)...
答案 0 :(得分:1)
我整理了一个小应用程序来重现这个问题。通过在调用MessageBox之前调用SetForegroundWindow,我能够成功地显示消息框。
case WM_SYSCOMMAND:
if (wParam == SC_CLOSE)
{
SetForegroundWindow(hWnd);
MessageBox(hWnd, L"Are you sure you want to exit", L"Close Window", MB_OK);
}
else
{
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
答案 1 :(得分:0)
我会为WM_SYSCOMMAND实现一个处理程序,并在应用程序定义的消息后发布SC_CLOSE行为,该消息将显示您的UI,如果用户想要退出,则将WM_CLOSE发布到原始窗口。
或者,记事本似乎使用task dialog,而不是消息框。你试过了吗?