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


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


dc.Rectangle(5,5,20,20);                       //Рисуем этим пером квадрат

В программах части II этой книги мы, во-первых, при выборе в контекст нового инструмента сохра­няли в некоторой временной переменной исходный инструмент; во-вторых, перед выходом из функции OnPaint() восстанавливали в контексте этот исходный инструмент; в-третьих, перед завершением про­граммы удаляли все созданные инструменты.


Обработка сообщения WM_PAINT и интерфейс GDI                                                235

В OWL-программах эта процедура несколько упрощается, так как часть работы берут на себя функ­ции классов. При первой смене инструмента в контексте устройства функция SelectObject() сохраняет дескриптор инструмента, находящегося там по умолчанию (черное тонкое перо, белая кисть) в специаль­но отведенных для этого переменных-членах класса TDC OrgPen, OrgBrush, OrgFont и OrgPalette. Эти защищенные члены класса обычно недоступны программисту, однако они используются функциями Re-storePen(), RestoreBrush() и т.д., которые выбирают в контекст устройства сохраненные в перечисленных выше переменных дескрипторы инструментов. Поэтому при выборе в контекст нового инструмента нет необходимости сохранять старый (впрочем, и возможности такой тоже нет, так как используемая для выбора инструмента в контекст устройства функция SelectObject() ничего не возвращает). Далее, восста­навливать исходные инструменты в контексте тоже не обязательно, так как в деструкторе класса TDC вызывается функция RestoreObjects(), которая восстанавливает в контексте исходные значения всех де­скрипторов. Наконец, созданные инструменты можно не удалять, так как деструктор любого класса, вы­зываемый автоматически при выходе из процедуры, в которой был создан объект данного класса, удалит этот объект (между прочим, в составе классов инструментов, например, ТРеn или TBrush, даже нет функций типа DeletePen() или DeleteBrush(), что, впрочем, вполне естественно, так как основным назна­чением деструктора и является как раз удаление объекта).




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