Функция окна
Другим базовым понятием, с которым вы неизбежно столкнетесь при создании приложений для Presentation Manager, является так называемая функция окна .
Чтобы вам было понятно назначение функции окна, проведем аналогию окон, создаваемых системой Presentation Manager, с объектами в языке программирования C++. Там объект определяется как структура данных и набор методов, предназначенных для обработки этих данных. В качестве методов выступают функции. Среди этих методов существуют два особых - конструктор и деструктор. Эти методы выполняют, соответственно, создание и уничтожение объекта.
Окно, созданное с помощью средств Presentation Manager, можно также рассматривать как объект, состоящий из некоторой структуры данных и методов, реализованных с помощью функции окна. При этом функция окна полностью определяет свойства окна.
Создавая окно, вы должны в вашем приложении создать для него функцию окна. В этой функции вы определяете реакцию окна на различные внешние воздействия, такие, например, как инициализация приложения и завершение его работы, перерисовка внутренней области окна, щелчок клавишей мыши и т. д.
Как вы увидите позже, отдельные фрагменты функции окна выполняют работу конструктора и деструктора, а также других методов, определяющих поведение окна.
Самое интересное заключается в том, что после определения функции окна приложение... никогда не вызывает эту функцию!
Зачем, спросите вы, приложение создает функцию, которую оно не вызывает?
Дело в том, что функция окна вызывается системой Presentation Manager, когда над окном выполняются какие-либо действия. После вызова функция окна анализирует параметры, полученные ей от Presentation Manager, и выполняет соответствующий фрагмент, определяющий реакцию окна на данное действие.
Если вы знакомы со структурой драйверов MS-DOS , то вам будет понятна аналогия между функцией окна и функцией прерывания драйвера. Драйвер создает функцию прерывания, которая обрабатывает посылаемые ему команды, однако сам драйвер никогда напрямую не вызывает эту функцию.
Таким образом, для каждого окна приложение должно определить функцию окна и каким-то образом (каким - вы узнаете позже) указать системе Presentation Manager, что для данного окна будет использована именно эта функция. После создания окна система Presentation Manager будет при необходимости вызывать функцию окна.
Параметры этой функции полностью аналогичны параметрам функции окна.
При создании окна ему передается сообщение WM_CREATE . Обработчик этого сообщения может проверить параметры, переданные функции создания окна, или выполнить какие-либо инициализирующие действия, например, дианмическое получение блока памяти или инициализацию данных. Если такие действия не нужны, функция окна может не обрабатывать это сообщение, передавая его функции WinDefWindowProc .
Аналогично, в процессе уничтожения окна функции окна передается сообщение WM_DESTROY . Обработчик этого сообщения должен освободить ресурсы, заказанные у операционной системы обработчиком сообщения WM_CREATE .
Сравнивая окно с объектом языка программирования С++, можно сказать, что обработчик сообщения WM_CREATE выполняет функцию конструктора, а обработчик сообщения WM_DESTROY - функцию деструктора объекта.
Функция окна может получать сообщения с десятками различных кодов, поступающих от мыши, клавиатуры, таймера, различных органов управления приложения, дочерних окон, операционной системы и других приложений. Мы будем рассказывать вам об этих сообщениях по мере необходимости.