c++ - 从任务栏缩略图关闭按钮打开处理 WM_CLOSE 时不显示 MessageBox

标签 c++ windows winapi windows-7 aero-peek

尝试在 Windows 7 的任务栏缩略图中使用关闭按钮关闭窗口时尝试设置“你想保存吗”对话框(启用 aero peek)。

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

许多应用程序都有这种错误行为,所以这可能是 Windows 7 中的设计缺陷,但对于某些程序(Word、记事本、Visual Studio 等)它可以正常工作,所以我想知道他们使用了什么技巧(或者以编程方式“退出”aero peek-mode 需要什么)。

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

最佳答案

我整理了一个小应用程序来重现这个问题。通过在调用 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;

关于c++ - 从任务栏缩略图关闭按钮打开处理 WM_CLOSE 时不显示 MessageBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2911511/

相关文章:

winapi - NtSetValueKey 创建 String 但 ValueData 不符合指定

c++ - 为什么需要使用 "WINAPI*"作为语法来为 DLL 中的函数声明函数指针

c++ - 删除 msvc dll 依赖以运行 qt 应用程序

c++ - 服务 DLL 的 CPU 使用率?

c++全透明窗口但仍然阅读文本例如

windows - 如何显示 'Send to' 和 'Open With' 上下文菜单?

c++ - 在有人尝试写入文件之前,我如何读取文件?

c++ - 数组内存地址总是按从小到大的顺序排列吗?

c++ - 传递数组结构作为引用 C++

windows - 为什么有些网络 API 能够接受远程连接,而有些则不能?