模态消息循环中的WM_CLOSE

时间:2011-08-17 11:27:09

标签: c++ windows winapi

我正在为自定义对话框使用特殊的消息循环。当对话框打开并且窗口关闭时,我想到达第二个,如果下面,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以查看循环是否是问题,但另一条消息工作正常。怎么了?

1 个答案:

答案 0 :(得分:3)

似乎发送了WM_CLOSE,并发布了另一条消息。

GetMessagePeekMessage仅对已发布的消息(使用PostMessage发布的消息)进行操作。如果邮件未发布但通过SendMessage发送,则会立即在PeekMessageGetMessage内处理,因此您无法获取MSG结构。