C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 51 - GetMessage() / Win 32 API / Win32 API

Шаг 51 - GetMessage()

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

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

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

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

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

51_1.gif (3761 b)

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

51_2.gif (3511 b)


| |
Автор Каев Артем.
[AD]