Style:= cs_HRedraw or cs_VRedraw; {Стиль окна класса: окно будет перерисовываться при изменении его горизонтальных и вертикальных размеров}
lpfnWndProc:= @WindowProc; {Указатель на оконную функцию, которая будет обрабатывать все сообщения, посылаемые окну}
cbClsExtra:= 0; {Выделенная память, используемая программой по своему усмотрению}
cbWndExtra:= 0; {Выделенная память, используемая программой по своему усмотрению}
hInstance:= 0; {Ссылка на экземпляр программы, используется ядром Windows для однозначного определения сегмента данных экземпляра программы}
hIcon:= LoadIcon (0, idi_Application); {Ссылка на иконку для окна, для отображения минимизированного окна, в данном случае – иконка, соответствующая приложению}
hCursor:= LoadCursor (0, idc_Arrow); {Ссылка на курсор, в данном случае – в виде стрелки}
hbrBackground:= GetStockObject (White_Brush); {Ссылка на шаблон заполнения фона для окна}
lpszMenuName:= ''; {Ссылка на строку с именем меню}
lpszClassName:= AppName; {Имя класса}
end;
{ Регистрация окна с заданными атрибутами. Параметр функции – структура типа TWndClass, содержащая атрибуты окон данного класса}
If RegisterClass (WindowClass) = 0 then
Halt (255); {Регистрация невозможна, завершение работы программы}
Window:= CreateWindow {Создает окно и возвращает ссылку на окно типа HWnd}
(AppName, {Имя класса, к которому принадлежит создаваемое окно}
'Моя форма', {Заголовок окна}
ws_OverlappedWindow, {Стиль окна, в данном случае – комбинация стилей}
cw_UseDefault, {X – начальная позиция верхнего левого угла, в данном случае – значение по умолчанию}
cw_UseDefault, {Y – начальная позиция верхнего левого угла, в данном случае – значение по умолчанию}
800, {Width – начальная ширина окна, в данном случае – значение по умолчанию}
600, {Height – начальная ширина окна, в данном случае – значение по умолчанию}
0, {WndParent – родительское окно данного окна}
0, {Menu – меню, используемое данным окном}
HInstance, {Instance – указывает на экземпляр программы, этот параметр указывается, чтобы оконная функция имела доступ к сегменту данных программы}
nil); {Param – определяет дополнительную информацию, посылаемую через сообщение wm_Create}
{Окно создано, его необходимо отобразить на экране}
ShowWindow (Window, CmdShow); {Отображает или делает невидимым указанное окно}
UpdateWindow (Window); {Указывает прикладной программе, что часть окна нуждается в перерисовке}
{После того, как окно отбражено на экране, управление передаётся циклу обработки сообщений. GetMessage извлекает сообщения из очереди и помещается в структуру типа TMsg.Для всех сообщений, отличных от wm_Quit (завершение работы программы), эта функция возвращает ненулевое значение, и цикл продолжает обработку сообщений}
while GetMessage (Message, 0, 0, 0) do {GetMessage возвращает сообщение из очереди GetMessagePos}
Begin
{TranslateMessage передает структуру типа TMsg ядру Windows для преобразования сообщений о введенных символах}
TranslateMessage (Message); {Переводит сообщение виртуальных клавиш в символьное сообщение}
DispatchMessage (Message); {Передает сообщение оконной функции указанного окна}
{После того, как оконная функция обработала сообщение, управление возвращается в цикл обработки сообщений}
end; {конец цикла обработки сообщений}
Halt (Message.wParam); {Программа завершается}
End.
Контрольные вопросы:
Дайте определения событию и сообщению.
Под событием понимается факт свершения элементарного действия, от которого может зависеть ход выполнения программы. Событиями, например, являются: нажатие клавиши на клавиатуре, перемещение мыши, истечение заданного промежутка времени.
Сообщение – это уведомление о некотором произошедшем событии, на которое приложение отвечает определенным образом. Такое событие может быть инициировано пользователем путем нажатия клавиши, перемещения мыши, изменения размера окна или выбора команды из меню. В теле каждого приложения Windows имеется цикл обработки сообщений системы, который является ядром программы.
Перечислите основные действия, которые должно выполнять любое Windows-приложение.
Основные действия, которые может выполнять любое Windows-приложение:
- регистрация оконного класса;
- создание окна;
- отображение окна;
- обновление рабочей области окна;
- организация цикла обработки сообщений.
Цикл обработки сообщений включает:
- прием сообщения;
- трансляцию сообщения;
- диспетчирование сообщения.
Реакцию программы на поступающие сообщения описывает оконная функция, которая вызывается из диспетчера.