Программирование в среде Windows. Шаблон Windows-программ, страница 3

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

WindowClass.hbrBackground:=GetStockObject (white_Brush);

WindowClass.lpszMenuName:='';

WindowClass.lpszClassName:=AppName;

{Регистpация класса}

if not RegisterClass(WindowClass) then Halt(255);

end;

               {Создание окна с опpеделенными атpибутами}

Window:=CreateWindow(AppName, 'Win_Min',

ws_OverlappedWindow, cw_UseDefault, cw_UseDefault,

cw_UseDefault,  cw_UseDefault, 0, 0, HInstance, nil);

ShowWindow (Window, CmdShow);

UpdateWindow (Window);

               {Циклобpаботкисообщений}

While GetMessage (Message,0,0,0) do

begin

TranslateMessage (Message);

DispatchMessage (Message);

end;

Halt (Message.wParam);

End;

BEGIN

WinMain;

END.

Теперь рассмотрим действия, выполняемые каждой частью программы.

Программа состоит из функции WindowProc, процедуры WinMain и вызовов одиннадцати функций Windows API.

Процедура WinMain - это точка входа в программу, которая получает управление от ядра Windows. Каждая Windows-программа должна иметь такую процедуру.

Функция WindowProc - это специальная "оконная" функция, обрабатывающая сообщения, посылаемые окну. Эта функция вызывается непосредственно ядром Windows. Функции, вызываемые Windows, называются косвенно-вызываемыми.

Процедура WinMain.

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

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

Окно всегда создается на основе класса. В этом классе указывается адрес "оконной" функции, обрабатывающей поступающие от ядра Windows сообщения, а также атрибуты всех окон, принадлежащих этому классу, т.е. задаются основные свойства класса. Перед созданием окна класс должен быть зарегистрирован вызовом функции RegisterClass. Класс окна представлен структурой TWndClass.

Когда всем полям структуры TWndClass присвоены необходимые значения (определены атрибуты окна), для регистрации класса окна производится вызов функции RegisterClass. Этой функции передается структура типа TWndClass, содержащая атрибуты окон данного класса.

Создание и отображение окна.

Созданный класс окна определяет основные характеристики окна. При создании конкретного окна данного класса, используя вызов функции CreateWindows, можно указать более детальные характеристики для данного конкретного окна. Функция CreateWindows возвращает ссылку на окно типа HWnd, сохраняемую в переменной Window. Эта ссылка затем используется большинством функций Windows, работающих с этим окном.

После того, как окно создано, его необходимо отобразить на экране. Для этого используется функция ShowWindow, а для перерисовки изображения внутри окна - функция UpdataWindow. Функция ShowWindow принимает в качестве параметра ссылку на окно, возвращенную функцией CreateWindow, и параметр cmdShow, определяющий как окно отображается на экране.

Вызов процедуры UpdataWindow вызывает перерисовку рабочей области окна.

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

После того, как окно отображено на экране, управление передается циклу обработки сообщений. В этом цикле при помощи функции GetMessage сообщения извлекаются из очереди и помещаются в структуру типа TMsg. Для всех сообщений, отличных от сообщений wm_Quit (завершение работы программы), эта функция возвращает нулевое значение и цикл продолжает обработку сообщений.

Процедура TranslateMessage передает структуру типа TMsg ядру Windows для преобразования сообщений о введенных символах. Ядро Windows посылает сообщение оконной функции нашей программы, указанной при создании класса окна. После того как оконная функция обработала сообщение, управление возвращается в цикл обработки сообщений.

Оконная функция

Оконная функция выполняет непосредственную обработку сообщений. Параметры, передаваемые этой функции, эквивалентны полям структуры типа TMsg. Каждое получаемое оконной функцией сообщение имеет уникальный идентификатор. Обычно для обработки сообщений используется конструкция типа переключателя.

Все сообщения, не обрабатываемые оконной функцией, передаются специальной функции ядра Windows DefWindowProc.