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

Простейший цикл обработки сообщений состоит из вызовов двух функций – GetMessage и DispatchMessage.

BOOL WINAPI GetMessage(

LPMSG lpMsg,// Указатель на структуру MSG, которая получает информацию об очередном сообщении из очереди сообщений.

HWND hWnd,// дескриптор окна, чьи сообщения должны быть извлечены.

UINT wMsgFilterMin, //наименьший номер сообщения

UINT wMsgFilterMax//наибольший номер сообщения

);

Если wMsgFilterMin и wMsgFilterMax равны нулю, GetMessage возвращает все доступные сообщения (то есть, фильтрация сообщений не выполняется).

Функция GetMessage предназначена для выборки сообщения из очереди приложения. Сообщение выбирается из очереди и записывается в область данных, принадлежащую приложению. Функция возвращает ненулевое значение, если очередное сообщение не WM_QUIT, и ноль в случае WM_QUIT.

Функция DispatchMessage предназначена для распределения выбранного из очереди сообщения нужной функции окна. Так как приложение обычно создает много окон, и эти окна используют различные функции окна, необходимо распределить сообщение именно тому окну, для которого оно предназначено. Windows оказывает приложению существенную помощь в решении этой задачи – для распределения приложению достаточно вызвать функцию DispatchMessage.

Вот как выглядит простейший вариант цикла обработки сообщений:

MSG msg;

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

{

DispatchMessage(&msg);

}

return (int) msg.wParam;

Завершение цикла обработки сообщений происходит при выборке из очереди сообщения WM_QUIT, в ответ на которое функция GetMessage возвращает нулевое значение.

Коды сообщений определены в файле WinUser.h, включаемом в исходные тексты любых приложений Windows.

Функции работы с сообщениями

Таблица 2

Функции для работы с сообщениями

  Имя функции Назначение
  GetMessage Извлекает сообщение из очереди сообщений приложения.
  DispatchMessage Передает сообщение функции окна.
  PostMessage Посылает сообщение в очередь.
  SendMessage Посылает сообщение в функцию окна, возврат из функции происходит после обработки этого сообщения.
  PostQuitMessage Посылает сообщение о завершении (WM_QUIT) в очередь сообщений приложения.
  TranslateMessage Переводит сообщения виртуальных клавиш в символьные.

Классификация сообщений по функциональным признакам

Таблица 3

Системные сообщения

  WM_SYSCOMAND Выбран пункт меню System
  WM_SYSKEYDOWN Нажата системная клавиша
  и др.  

Таблица 4


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: