2017-04-05 193 views
1

我有以下代码的GetMessage /的PeekMessage - 删除在消息队列中的所有消息

SendApp,当点击按钮[X],下面的代码执行

HWND pHWndReceiveApp = FindWindowA(NULL, "ReceiveApp"); 
    if (NULL == pHWndReceiveApp) 
    { 
     MessageBox(0, MSG_FAIL, CAPTION, 0); 
     return; 
    } 
    for (int i = 0; i < 7; i++) 
    { 
     PostMessageA(pHWndReceiveApp, 9, 9, 0); 
    } 
    MessageBox(0, MSG_OK, CAPTION, 0); 

ReceiveApp,这仅仅是一个应用程序来收到SendApp消息

int i = 0; 
msg.message = 69; 
while (WM_QUIT != msg.message) 
{ 
    if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) > 0) 
    { 
     if (msg.message == 9) 
     { 
      //I want to remove all messages in the message queue before increase i 
      ++i; 
      Sleep(1000); 
     } 

     TranslateMessage(&msg); 
     DispatchMessage(&msg); 
    } 
} 

因此,大家可以看到,我想增加变量i ReceiveApp前去除所有消息在消息队列中。 我读this article并看到

PM_REMOVE - 消息从处理后的队列由 的PeekMessage除去。

我认为所有的消息都应该被删除,但是他们没有,在SendApp中按下按钮[X]之后,ReceiveApp中的变量仍然会增加7。

那么如何删除消息队列中的所有消息?

回答

0

我明白了。我们可以在一个while循环中使用PeekMessage来清除队列中的消息,如下所示

#define ID 9 
//... 
int i = 0; 
msg.message = 69; 

while (GetMessage(&msg, 0, 0, 0)) 
{ 
    if (msg.message == ID) 
    { 
     TranslateMessage(&msg); 
     DispatchMessage(&msg); 
     while (PeekMessage(&msg, NULL, ID, ID, PM_REMOVE) > 0) //Clear message queue! 
     { 
      TranslateMessage(&msg); 
      DispatchMessage(&msg); 
     } 
     //I want to remove all message in the message queue before increase i 
     ++i; 
     Sleep(1000); 
    } 
}