3

尝试在 Windows 7 中尝试使用任务栏缩略图中的关闭按钮关闭窗口时显示“您要保存”对话框(启用了 aero peek)。

处理 WM_CLOSE 时使用 MessageBox() 不起作用。直到您将鼠标光标移到缩略图之外,MessageBox 才会显示,因此禁用了 aero peek。

许多应用程序都有这种错误行为,因此它可能是 Windows 7 中的设计缺陷,但对于某些程序(Word、记事本、Visual Studio ......),它可以工作,所以我想知道他们正在使用什么技巧(或者它是什么以编程方式“退出”航空窥视模式)。

Windows 7 附带的小型“录音机”应用程序也有同样的问题(如果您在未保存的情况下录制了某些内容并尝试使用缩略图关闭按钮将其关闭)...

4

2 回答 2

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;
于 2011-01-21T20:13:51.583 回答
0

我将为WM_SYSCOMMAND实现一个处理程序,并让 SC_CLOSE 行为发布一条应用程序定义的消息,该消息将显示您的 UI,并在用户想要退出时将 WM_CLOSE 发布到原始窗口。

或者,记事本似乎正在使用任务对话框,而不是消息框。你试过吗?

于 2010-05-26T19:58:28.640 回答