Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Цикл обработки сообщений



Программа получает информацию от пользователя через клавиатуру и мышь. Для каждой программы, работающей в данный момент, Windows поддерживает «очередь сообщений» (message queue). Когда происходит ввод информации, она преобразуется в «сообщение», которое помещается в эту очередь.

Программа извлекает сообщения из очереди, выполняя блок соответствующих команд, известный как «цикл обработки сообщений» (message loop):

while (GetMessage (&msg, NULL, 0, 0)) {

TranslateMessage (&msg);

DispatchMessage (&msg);

}

return msg.wParam;

Переменная msg – структура типа MSG, определенная следующим образом:

typedef struct tagMSG {

HWND hwnd;

UINT message;

WPARAM wParam;

LPARAM lParam;

DWORD time;

POINT pt;

} MSG;

Тип данных POINT определяется как

typedef struct tagPOINT {

LONG x;

LONG y;

} POINT;

Вызов функции

GetMessage (&msg, NULL, 0, 0);

извлекает сообщение из очереди и в Windows передается указатель на структуру msg; второй, третий и четвертый параметры (NULL или 0) показывают, что программа получает все сообщения от всех окон. Система Windows заполняет поля структуры сообщений информацией об очередном сообщении из очереди. Поля этой структуры следующие:

hwnd – описатель окна, для которого предназначено сообщение;

message – идентификатор сообщения, который задается в заголовочных файлах и начинается с префикса WM (оконное сообщение – window message);

wParam – 32-разрядный параметр сообщения, смысл и значение которого зависят от особенностей сообщения;

lParam – 32-разрядный параметр, зависящий от сообщения;

time – время, когда сообщение было помещено в очередь;

pt – координаты курсора в момент помещения сообщения в очередь.

Если поле message сообщения, извлеченного из очереди, равно любому значению, кроме WM _ QUIT (0x0012), то функция GetMessage возвращает ненулевое значение; сообщение WM _ QUIT прерывает цикл обработки сообщений – программа заканчивается, возвращая число wParam структуры msg.

Функция TranslateMessage (&msg); передает структуру msg обратно в Windows для преобразования сообщения.

Функция DispatchMessage (& msg); передает структуру msg для ее обработки соответствующей оконной процедурой (WndProc). После того как WndProc обработает сообщение, оно возвращается в Windows, которая все еще обслуживает вызов функции DispatchMessage. Когда Windows возвращает управление в программу к следующему за вызовом DispatchMessage коду, цикл обработки сообщений в очередной раз возобновляет работу, вызывая GetMessage.





Дата публикования: 2015-09-17; Прочитано: 199 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.005 с)...