Лабораторная работа
Тема: Окно. Создание и регистрация класса окна.
Цель: Научиться создавать и регистрировать окно, изменять его атрибуты.
Краткая теория.
Создание и регистрация класса окна
В 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.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.