Окно. Создание и регистрация класса окна, изменение атрибутов

Страницы работы

Содержание работы

Лабораторная работа

Тема: Окно. Создание и регистрация класса окна.

Цель: Научиться создавать и регистрировать окно, изменять его атрибуты.

Краткая теория.

Создание и регистрация класса окна

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

Для использования класса, его необходимо зарегистрировать. Для вызывают функцию RegisterClass. К сожалению. Windows не позволяет создавать новый класс на основе существующего. Тем не менее, имеется возможность подключить новую оконную функцию в добавок к существующей и видоизменить стандартные свойства класса. Созданный таким образом класс называется подклассом (subclass).

Function RegisterClass (var WndClass: TWndClass): Bool;

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

Класс окна описывается структурой TWndClass, определенной в файле WINTYPES.INT, и состоит из десяти полей.

TWndClass = Record

Style: Word;

IpfnWndProc: TFarProc;

cbClsExtra: Integer;

cbWndExtra: Integer;

hlnstance:THandle;

hicon: HIcon;

hCursor: HCursor;

hbrBackground: HBrush;

IpszMenuName: PChar;

IpszClassName: PChar;

End;

1) TWndClass.Style - стиль окна класса. Константы, описывающие стиль окна, имеют префикс cs (classstyle).

Стили окон:

cs_ByteAlignClient: рабочая область окна выравнивается на границу байта по координате X.

cs_ByteAlignWindow: окно выравнивается на границу байта по координате X.

cs_ClassDC: экземпляры класса окна имеют свой собственный дисплейный контекст.

cs_DbIClks: окно принимает сообщения о двойном нажатии кнопки манипулятора мышь".

cs_GlobalClass: этот класс окна может быть использован всеми программами.

csJHRedraw: окно будет перерисовано при изменении его горизонтального размера.

cs_NoClose: из системного меню удаляется команда Close (закрыть окно).

cs_OwnDC: каждое окно класса имеет свой собственный дисплейный контекст. (Подробнее контекст дисплея рассмотрен в разделе, посвященном GDI). В этом случае для каждого окна требуется дополнительно около 200 байт памяти.

cs_ParentDC: при выводе изображений используется дисплейный контекст родительского окна.

cs_SaveBits: содержимое окна сохраняется как растровое изображение, что дает возможность быстро восстанавливать его содержимое.

cs_VRedraw: окно будет перерисовано при изменении его вертикального размера.

Примечание: Здесь и далее допустима комбинация отдельных стилей используя логическую операцию "ИЛИ", например:

cs_HRedraw or cs_VRedraw

Использование стиля cs_VRedraworcs_HRedraw указывает на то, что содержимое окна должно быть перерисовано при изменении размера окна по вертикали (cs_VRedraw) или горизонтали (csJHRedraw).

2) TWndClass.lpfnWndProc, содержит указатель на оконную функцию, которая будет обрабатывать все сообщения, посылаемые окну.

3)TWndClass.cbClsExtra

4) TWndClass.cbWndExtraпозволяют выделить дополнительную память в структуре определения класса.

5) TwndCIass.hInstance - это ссылка на экземпляр программы (эта ссылка используется для однозначного определения сегмента данных экземпляра программы, так как Windows позволяет запустить несколько экземпляров одной и той же программы, при использовании одного экземпляра программного кода) . Это поле используется ядром Windows.

6) TWndClass.hIcon определяет ссылку на иконку для окон, создаваемых на основе этого класса. Эта иконка используется для отображения окна в минимизированом состоянии. Для получения ссылки на иконку необходимо воспользоваться функцией Loadlcon.

Например,

MyClass.hlcon := LoadIcon(0, idi_Application);

В Windows существуют следующие иконки:

idi_Application – Иконка, соответствующая приложению

idi_Asterisk  Символ ‘I’ для информационных сообщений

idi_Exclamation –  Символ ‘!’ для предупреждений

idi_Hand –  Символ для сообщений об ошибках

idi_Question –  Символ '?’ для ввода информации

Если значение поля hIcon равно 0, прикладная программа должна сама отображать иконку при переходе окна в минимизированное состояние.

7) TWndClass.hCursor – ссылка на курсор, используемый в программе. Для получения ссылки на курсор необходимо воспользоваться функцией LoadCursor. Если курсор не указан (значение этого поля = 0), прикладная программа должна сама отображать курсор при перемещении манипулятора "мышь".

Например:

MyClass.hCursor:= LoadCursor(0, idc_Arrow);

ТИПЫ КУРСОРОВ:

idc_Arrow –  Стандартная стрелка

idc_Cross–  Перекрестье

idc_IBeam –  Используется при редактировании

idc_Icon –  Концентрические прямоугольники

idc_Size –  Стрелка, указывающая в четыре стороны (север, юг, восток, запад)

idc_SizeNESW –  Стрелка, указывающая в две стороны (северо-восток и юго-запад)

idc_SizeNS –  Стрелка, указывающая в две стороны (север и юг)

idc_SizeNWSE –  Стрелка, указывающая в две стороны (северо-запад и юго-восток)

idc_SizeWE –  Стрелка, указывающая в две стороны (восток и запад)

idc_UpArrow –  Стрелка, указывающая вверх

idc_Wait –  Изображение песочных часов

8) TWndClass.hbrBackground –  ссылка на шаблон заполнения фона для окон, созданых на основе этого класса. Окно заполняется указанным шаблоном при обработке сообщения wm_EraseBackground.

Похожие материалы

Информация о работе

Тип:
Задания на лабораторные работы
Размер файла:
127 Kb
Скачали:
0