【发布时间】: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())