我正在为自定义对话框使用特殊的消息循环。当对话框打开并且窗口关闭时,我想到达第二个,如果下面,if(msg.message == WM_CLOSE)。
for(;;)
{
if(PeekMessage(&msg, 0, 0, 0, PM_NOREMOVE))
{
if(msg.message == WM_CLOSE)
{
GetMessage(&msg, 0, 0, 0);
break;
}
else
{
if(GetMessage(&msg, 0, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
if(msg.message == msgEnd)
break;
}
}
问题是这个中的代码永远不会到达。我尝试用另一条消息替换WM_CLOSE以查看循环是否是问题,但另一条消息工作正常。怎么了?
答案 0 :(得分:3)
似乎发送了WM_CLOSE,并发布了另一条消息。
GetMessage
和PeekMessage
仅对已发布的消息(使用PostMessage
发布的消息)进行操作。如果邮件未发布但通过SendMessage
发送,则会立即在PeekMessage
或GetMessage
内处理,因此您无法获取MSG
结构。