|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Цикл обработки сообщенийПрограмма получает информацию от пользователя через клавиатуру и мышь. Для каждой программы, работающей в данный момент, 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.
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.) |