2011-08-17 85 views
2

我正在为自定义对话框使用特殊的消息循环。当对话框打开并且窗口关闭时,如果(msg.message == WM_CLOSE),我想到达第二个。模态消息循环中的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来查看循环是否是问题,但其他消息正常工作。怎么了?

回答

3

看来WM_CLOSE已发送,而另一个消息已发布。

GetMessagePeekMessage只对发布的消息(以PostMessage发布的消息)进行操作。如果邮件没有发布但通过SendMessage发送,则会立即在PeekMessageGetMessage内处理,因此您无法获得MSG结构体。

+1

有没有办法让我检查消息何时发送,并执行内部的代码?我需要一种方法来处理对话框打开并且窗口关闭的情况。 – Karl 2011-08-17 11:58:36