Повідомлення з черги

Система може відображати будь-яку кількість вікон одночасно. Маршрут миші та клавіатури на відповідне вікно, система використовує черги повідомлень.

система зберігає одну систему черга повідомлень і будь-яку кількість потік черги повідомлень, один для кожної ниті GUI. Щоб уникнути накладні витрати на створення черга повідомлень для не ГІК теми, усі теми спочатку створюються без черга повідомлень. Система створює черга повідомлень в темі, тільки тоді, коли потік робить його першого дзвінка до одного користувача Win32 або GDI функцій.

Кожного разу, коли користувач переміщує миша, натискання кнопки миші або типів на клавіатурі, драйвер пристрою для миші або клавіатури перетворює введення в повідомлення і розміщує їх у черзі повідомлення системи. Системи видалення повідомлень, один за одним, система черга повідомлень, аналізує їх, щоб визначити вікна призначення і потім на посаді їх з потоком, який створив вікна призначення, черга повідомлень. Черга повідомлень тема отримує всіх повідомлень миші та клавіатури для windows, створені в потоці. Потік видаляє повідомлення від своєї черги і направляє в систему, щоб надіслати їх відповідне вікно процедури обробки.

Крім на WM_PAINT повідомлення, системи завжди повідомлення повідомлення в кінці черга повідомлень. Це гарантує, що вікно отримує її повідомлення для вводу у належному, перший в first-out (FIFO) порядку. WM_PAINT повідомлення, однак, зберігається в черзі і направлений до процедури вікно тільки тоді, коли черги містить немає інших повідомлень. Декілька WM_PAINT повідомлень на тому ж вікні об'єднані в одне повідомлення WM_PAINT, консолідація всі неприпустимі частини області клієнта в одному районі. Об'єднання повідомлення WM_PAINT зменшує кількість разів, вікна повинні перемальовування вмісту своєї клієнтської області.

Система повідомлень повідомлення з потоку чергу повідомлення по заповнення структуру MSG а потім скопіювати його до черги поточного повідомлення. Включає інформацію в MSG : дескриптор вікна, для яких воно передбачалося, ідентифікатор повідомлення, два параметри повідомлення, час, що повідомлення було опубліковано, та положення курсору миші. Потік може опублікувати повідомлення свою власну черга повідомлень або черги інший потік за допомогою функції PostMessage або PostThreadMessage.

Програми можна видалити повідомлення з своєї черги за допомогою GetMessage функції. Вивчити повідомлення без видалення її зі своєї черги, застосунку можна використовувати функцію PeekMessage . Ця функція заповнює MSG відомості про повідомлення.

Після видалення повідомлення від своєї черги, заявку можна скористатися функцією DispatchMessage прямого система для надсилання повідомлення до вікна процедуру для обробки. DispatchMessage приймає вказівник MSG , яка була заповнена на попередній виклик функції GetMessage або PeekMessage . DispatchMessage проходить дескриптор вікна "," ідентифікатор повідомлення "і" два параметри повідомлення у вікні порядку, але вона не згаяти час повідомлення було опубліковано або миша позиції курсора. Застосунок цю інформацію можна отримати на виклик функції GetMessageTime і GetMessagePos під час обробки повідомлення.

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

Ви можете назвати SetMessageExtraInfo функція асоціювати 32-бітні значення з поточного потоку чергу повідомлення. Потім викликати функцію " GetMessageExtraInfo ", щоб отримати значення, пов'язані з останнього повідомлення, отримані за допомогою функції GetMessage або PeekMessage.

Index