GetMessage()

Эта функция извлекает сообщение из очереди.

BOOL GetMessage
(
LPMSG lpMsg, // указатель на структуру
HWND hWnd, // указатель окна чьи сообщения нужно обрабатывать
UINT wMsgFilterMin, // номер мимимального сообщения для выборки
UINT wMsgFilterMax // номер максимального сообщения для выборки
);

С помощью переменной hWnd есть возможность указать конкретное окно, от которого будет принято сообщение. Если установить это значение в NULL, то будут приниматься все сообщения. Возврат этой функции будет отличен от нуля пока не будет получено сообщение WM_QUIT. Это дает возможность вроде как организовать цикл в программе типа:

while(GetMessage(:)
{
//...
}

Эта функция кстати может завершиться ошибкой, то есть вернуть -1. А вот тут-то мы сразу и видим, что вышеуказанный код неверен и может привести к ошибке в приложении. Правда во всех книгах он описан, так как и у меня. Странно однако. Ну ладно. Хотя пренебрежение этим как пишет Microsoft может привести к фатальной ошибке "синий экран" и все такое. Эта функция блокирующая, то есть она блокирует приложение до того момента пока не будет получено сообщение, но в этот момент передается управление Windows для выполнения других приложений. Последние параметры устанавливают фильтр на сообщения. Если оба их поставить в 0б то будут приниматься все сообщения.

Итак, Windows получает сообщения от устройств типа клавиатуры, мыши, таймера и так далее. Естественно, что у каждого этого устройства есть драйвер, который и умеет сам работать с оборудованием. Сообщение попадает в очередь Windows, из которой уже сообщение передается в очередь сообщений приложения. Само приложение уже выбирает сообщения, используя GetMessage()

 
« Предыдущая статья   Следующая статья »