Е. К. Пугачев Объектно-ориентированное программирование Под общей редакцией Ивановой Г. С. Рекомендовано Министерством общего и профессионального образования Российской Федерации в качестве учебник

Вид материалаУчебник

Содержание


4.2.Структура приложения Windows
Подобный материал:
1   ...   22   23   24   25   26   27   28   29   ...   39
^

4.2.Структура приложения Windows


Каждому приложению Windows на экране соответствует окно. Окно - это прямоугольная область экрана стандартного вида (рис. 4.5), через которую пользователь взаимодействует с программой.



Рис. 4.56. Простейшее окно приложения Windows'95.

Хотя одно приложение может создать несколько окон, всегда имеется одно «главное» окно, при закрытии которого приложение завершает свою работу.

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

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

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



Рис. 4.57. Инициализация приложения и переход к обработке сообщений.

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

Все полезные для пользователя действия приложения программируются в виде «реакций окна» на получаемые сообщения.

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

В Windows определено множество типов сообщений. Каждое из них кодируется уникальным 32-разрадным числом, которому ставится в соответствие стандартное имя, например, WM_CHAR (посылается активному приложению при нажатии и отпускании клавиш на клавиатуре), WM_PAINT (посылается окну при необходимости его перерисовки), WM_CLOSE (посылается окну при необходимости его закрытия), WM_TIMER (посылается приложению при истечении указанного интервала времени) и т. д.

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

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



Рис. 4.58. Обработка ввода символа и его отображение в окне

Заметим, что для выполнения операций, связанных с управлением программно-аппаратными ресурсами (в том числе и для организации вывода информации в «свое» окно), обработчики сообщений, должны обращаться к операционной системе.

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

Однако не все сообщения попадают в функцию окна приложения через очередь сообщений. Приложение Windows одновременно манипулирует сообщениями трех типов:
  1. внешними (от Windows и других приложений) и внутренними (от самого приложения) сообщениями, поступающими через очередь сообщений;
  2. прямыми вызовами оконных функций (такой вызов также оперирует информацией, форматированной под сообщение);
  3. прямыми вызовами методов не оконных объектов приложения (в отличие от предыдущих случаев передаваемое сообщение как в ранних ООП системах не форматировано под сообщение).

Так, сообщения поддержки окна, формируемые Windows, передаются оконной функции напрямую.

Примером может служить сообщение WM_DESTROY (рис. 4.8), которое формируется при закрытии пользователем окна приложения.



Рис. 4.59. Обработка сообщения WM_DESTROY

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