Программирование под Win32


Программирование для Windows с помощью библиотеки объектов OWL - стр. 13


Класс TDC, являющийся базовым для целого ряда классов, описывающих различ­ные контексты устройств (TPaintDC, TWin-dowDC, TClientDC и др.), включает дескрип­торы исходных графических объектов (ин-

струментов рисования) OrgBrush, OrgPen, OrgFont и OrgPalette, а также большое количество (около 200) графических функций, обеспечивающих вывод на экран текстов, фигур и других изображений, создание, выбор и настройку инструментов рисования,- получение и изменение режимов работы графической сис­темы и т.д. Большинство этих функций инкапсулируют соответствующие функции API Windows.

Очень небольшой по объему класс TPaintDC содержит в качестве данных-членов дескриптор окна типа HWND (данное с именем Wnd) и хорошо известную нам структуру PAINTSTRUCT (данное с име-


230____________________________________________________________ ____Глава 26

нем Ps), используемую системой Windows при перерисовке изображения (см. гл. 8). Функций-членов в классе TPaintDC всего две: конструктор TPaintDC() и деструктор ~TPaintDC(). Как показано на рис. 26.2, в конструкторе вызывается функция API Windows BeginPaint(), которая заполняет структуру Ps и воз­вращает контекст устройства; в деструкторе вызывается функция API Windows EndPaint(), освобождаю­щая контекст устройства. Таким образом, при создании объекта класса TPaintDC автоматически выпол­няются необходимые инициализирующие действия, а при его уничтожении - необходимые завершаю­щие действия. Стоит еще отметить, что в деструктор ~TPaintDC() входит также вызов функции Restore-Objects(), выполняющей выбор в контекст устройства исходных инструментов. Таким образом, в OWL-программе после окончания работы с созданными и выбранными в контекст устройств инструментами, нет необходимости выполнять относительно громоздкую процедуру выбора назад в контекст всех ис­ходных дескрипторов, так это действие автоматически выполняется в деструкторе класса.

Поступление в окно приложения сообщения WM_PAINT приводит к вызову защищенной функции класса TWindow EvPaint(). Поскольку сообщение WM_PAINT приходит в наше окно, с которым ассо­циируется объект MyWin (являющийся потомком класса TWindow и наследующий его открытые и за­щищенные члены), то функция EvPaint() вызывается именно для этого объекта. Определение функции EvPaint() (которое можно найти в файле SOURCE\OWL\WINDOW.CPP), за вычетом некоторых несуще­ственных пока деталей, выглядит следующим образом:




Начало  Назад  Вперед



Книжный магазин