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.
Я читаю Эта статья и посмотри что

PM_REMOVE — сообщения удаляются из очереди после обработки
PeekMessage.

Я думал, что все сообщения должны быть удалены, но они этого не делают, переменная i в ReceiveApp по-прежнему увеличивается на 7 после того, как я нажимаю кнопку [X] в SendApp.

Итак, как я могу удалить все сообщения в очереди сообщений?

1

Решение

Я понял. Мы можем использовать PeekMessage в цикле while для очистки сообщения в очереди, как показано ниже

#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);
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]