Классический цикл сообщений Win32 выглядит примерно так:
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
Существует также функция PeekMessage()
, которая проверяет, доступно ли сообщение. При этом вы можете изменить цикл сообщений следующим образом:
while (GetMessage(&msg, NULL, 0, 0)) {
do {
TranslateMessage(&msg);
DispatchMessage(&msg);
} while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE));
onIdle();
}
Вышеуказанный цикл будет вызывать перевод / отправку, пока еще есть сообщения, доступные для обработки, а затем, когда их больше нет, он вызывает onIdle()
. Затем он возвращается во внешний цикл, чтобы снова вызвать GetMessage()
, чтобы дождаться следующего сообщения.
Обратите внимание, что это один из возможных способов реализовать функциональность onIdle в Win32. Я не знаю, так ли это .NET делает это.