有人可以解释为什么我从未WM_COMMAND在GetMessage循环中收到消息吗?
我已经检查过并且WndProc正在接收WM_COMMAND消息,所以我很困惑为什么这不起作用.
while (GetMessage(&msg, NULL, 0, 0) != 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
if (msg.message == WM_COMMAND)
{
// This never happens:
MessageBox(NULL, "WM_COMMAND", "WM_COMMAND", MB_OK);
}
}
Run Code Online (Sandbox Code Playgroud)
操作系统:Windows 8
因为WM_COMMAND是与SendMessage()一起发送的.这直接调用窗口过程.只有使用PostMessage()发布的消息才会添加到队列中,并由GetMessage()检索.
你可以在像Spy ++这样的实用程序中看到它,它注释用P发布的消息和用S发送的消息.