【问题标题】:C++ Window Message Loop, can't catch messagesC++ 窗口消息循环,无法捕获消息
【发布时间】:2014-05-01 00:16:06
【问题描述】:

首先,这是我的代码的重要部分:

MSG msg;
bool done = false;
ZeroMemory(&msg, sizeof(MSG));
while (!done)
{
    if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    {
            if (msg.message == WM_QUIT)
        {
             done = true;
        }
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}

我的问题是,第二个“if”语句实际上从未捕获 WM_QUIT 消息,因此我的消息循环永远不会结束。实际上,我无法在此循环中使用“if”语句捕获任何消息。使用 Visual Studio 2013 调试器,我尝试查看 msg.message 的值并将它们与可用窗口消息列表进行比较。我在该列表中找不到任何值。

是我不理解消息循环的概念,还是这段代码有其他错误?

【问题讨论】:

  • 上面的代码没有问题,所以要么你根本没有发布退出消息,将它发布到错误的地方,要么你的消息处理代码的某些部分运行它自己的消息循环并抛出它走了。
  • 确保在关闭主窗口时调用 PostQuitMessage()(捕获 WM_CLOSE 和/或 WM_DESTROY 并从那里调用 PostQuitMessage())

标签: winapi window


【解决方案1】:

Stefan 在其中一场比赛中得到了答案。

我的问题是我假设“DefWindowProc”调用 PostQuitMessage() 但它没有。将该调用添加到我的 WNDPROC 解决了这个问题。感谢您的帮助。

【讨论】:

    猜你喜欢
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多