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

Все события, происходящие в системе, обретают форму сообщений. Например, когда вы нажимаете и затем отпускаете клавишу, формируется прерывание, которое обрабатывается драйвером. Он вызывает процедуру в модуле user.exe, которая формирует сообщение, содержащее информацию о событии. Аналогично сообщения создаются при перемещении мыши или в том случае, когда вы нажимаете кнопки на корпусе мыши. Можно сказать, что драйверы устройств ввода/вывода транслируют аппаратные прерывания в сообщения.

Следует отметить, что в Windows используется многоуровневая система сообщений.

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

Куда направляются сообщения, созданные драйверами?

Прежде всего, сообщения попадают в системную очередь сообщений Windows, реализованную в модуле user.exe. Системная очередь сообщений одна. Далее из нее сообщения распределяются в очереди сообщений приложений. Для каждого приложения создается своя очередь сообщений.

Очередь сообщения приложений может пополняться не только из системной очереди. Любое приложение может послать сообщение любому другому сообщению, в том числе и само себе.

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

Рис.3 Обработка сообщений

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

Хотя одновременно может быть запущено много приложений, активным является только одно. Принято говорить, что это приложение имеет фокуса ввода. Все сообщения от клавиатуры и мыши идут в очередь приложения, имеющего фокус ввода.

Перемещать фокус ввода от одного окна к другому можно, нажимая определенные клавиши, или мышью.

Сообщения от драйвера мыши всегда передаются функции того окна, над которым находится курсор мыши. При необходимости приложение может выполнить операцию захвата (capturing) мыши. В этом случае все сообщения от мыши будут поступать в очередь приложения, захватившего мышь, вне зависимости от положения курсора мыши.


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



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