Вивчення черга повідомлень

Іноді застосунок має перевірте вміст на темі повідомлення від поза чергою в темі повідомлення циклі. Наприклад, якщо є застосування процедури вікно виконує тривалу операцію малювання, ви можете користувача для того, щоб перервати операцію. Якщо заявку періодично перевіряє черга повідомлень під час операції для миші та клавіатури повідомлення, воно не буде реагувати на користувача введення до, після завершення операції. Причиною цього є, що в темі повідомлення петлі, функцію DispatchMessage не повернутися до вікна процедура завершення обробки повідомлення.

Функція PeekMessage використовується для вивчення черга повідомлень під час тривалу операцію. PeekMessage схожа на функцію " GetMessage "; Як перевірити черга повідомлень для повідомлень, які відповідають критеріям і потім скопіювати повідомлення на структуру MSG . Основна різниця між дві функції полягає в тому, що GetMessage не повернутися до повідомлення, що відповідають умовам фільтра розміщено у черзі, у той час як PeekMessage повертає відразу ж, незалежно від того, чи є повідомлення в черзі.

Наступний приклад показує як використовувати PeekMessage , щоб вивчити черга повідомлень для кліків миші і введення клавіатури під час тривалу операцію.

HWND hwnd; 
BOOL fDone; 
MSG msg; 
 
/ / Почати операцію та продовжуйте до завершення / / або доки користувач натискає кнопку миші або натискає клавішу. 
 
fDone = F&ALSE; 
Хоча (! fDone) {fDone = DoLengthyOperation(); / / застосування визначені функції / / видалити будь-які повідомлення, які можуть бути в черзі. Якщо в / / черги містить будь-яку мишу або клавіатуру / / повідомлення, завершити операцію. 
 
    під час (PeekMessage (amp; msg, hwnd, 0, 0, PM_REMOVE)) {switch(msg.message) {випадку WM_LBUTTONDOWN: корпус WM_RBUTTONDOWN: справа WM_KEYDOWN: / / / / виконувати будь-які необхідні очищення. 
                / / fDone = TRUE; 
        } 
    } 
} 

 

Інші функції, у тому числі GetQueueStatus і GetInputState, також дозволяють перевірте вміст черга повідомлень в темі. GetQueueStatus повертає масив прапори, що вказує типи повідомлень у черзі; його використання є швидкий спосіб дізнатися, чи черги містить будь-які повідомлення. GetInputState повертає TRUE, якщо черги містить повідомлень миші або клавіатури. Обидві ці функції можуть бути використані для визначення, чи черги містить повідомлення, які потрібно обробити.

Index