У меня есть следующий код
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.
Итак, как я могу удалить все сообщения в очереди сообщений?
Я понял. Мы можем использовать 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);
}
}
Других решений пока нет …