Основные понятия. Главным элементом программы в среде Windows является окно

Главным элементом программы в среде Windows является окно. Для каждого окна определяется своя процедура обработки сообщений. Подобные процедуры, вызываемые самой системой, называются процедурами обратного вызова (CALLBACK).

Окно может содержать элементы управления: кнопки, списки, окна редактирования и др. Эти элементы, по сути, также являются окнами, но обладающими особыми свойствами. События, происходящие с этими элементами (и самим окном), приводят к приходу сообщений в процедуру окна. У каждого окна имеется свой идентификатор (дескриптор, handle) окна.

ОС Windows является событийно-управляемой операционной системой [1].Т.е. выполнение той или иной процедуры в приложении инициируется при наступлении определенного события (щелчка мыши, нажатия клавиши и т.п.). Для оповещения приложений о наступлении того или иного события используется механизм сообщений. Таким образом, приложение должно постоянно обрабатывать посланные ему сообщения: какие-то из этих сообщений будут обрабатываться с помощью определенных процедур, какие-то игнорироваться.

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

В общем случае, при посылке сообщения приложению, ОС передает следующую информацию [2].

typedef struct tagMSG { // msg

HWND hwnd;

UINT message;

WPARAM wParam;

LPARAM lParam;

DWORD time;

POINT pt;

} MSG;

где

hwnd - идентификатор окна, оконная процедура которого получает сообщение

message - определяет номер (код) сообщения.

wParam - определяет дополнительную информацию о сообщении. Точное значение этого поля зависит от кода сообщения (значения поля message).

lParam - определяет дополнительную информацию о сообщении. Точное значение этого поля зависит от кода сообщения (значения поля message).

time - определяет время, когда было размещено сообщение в очереди сообщений окна.

pt - определяет позицию курсора, в координатах экрана, в момент, когда было размещено сообщение.

Однако, микропроцессор не обрабатывает типы данных под названием " HWND ", " UINT ", " WPARAM " и т.д. - это так называемые логические типы данных. Микропроцессор оперирует двоичными числами, и с этой точки зрения, большинство параметров являются 32-х разрядными двоичными числами[1].

Необходимо отметить, что при обработке строк символов (заголовков окна, текстов сообщений) в качестве параметра передается указатель на строку. С учетом того, что в ОС Windows в основном используется плоская модель памяти (см. раздел 2), указатель является 32-х разрядным числом5. При этом, согласно все ключевые функции создания окон, вывода текста, манипулирования строками и т.п. обрабатывают строки в кодировке Unicode (в Unicode для кодирования символов может использоваться от 1 до 4 байт - UTF-8, однако в Windows используется кодировка UTF-16, предполагающая кодирование любого символа 16 битами). Если какой-либо функции Windows передать при вызове строку в кодировке ANSI (для кодирования символа используется 1 байт), то эта строка сначала будет преобразована в строку в кодировке Unicode, и лишь затем обработана. Поэтому, для повышения производительности приложений предпочтительней использовать строки в кодировке Unicode.

Классическая структура программы под Windows состоит из следующих разделов кода [2]:

· Регистрация класса окон

· Создание главного окна

· Цикл обработки очереди сообщений

· Процедура главного окна

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


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



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