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


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


Дальнейшие операции, использующие контексты устройств, должны выполняться непосредственно в функции Paint(), обрабатывающей сообщение WM_PAINT. Прежде всего с помощью конструктора клас­са TMemoryDC создается совместимый с контекстом устройства dc контекст памяти memdc. Далее функцией TMemoryDC::SelectObject() в него выбирается заданный объект. Из описания функции Selec-tObject()

void SelectObject(const TBitmap&)

видно, что в качестве параметра этой функции выступает объект класса TBitmap, передаваемый по ссыл­ке. У нас в программе объявлено не имя объекта, а указатель на него bitmap, из которого сам объект по­лучается снятием ссылки (символ *).

Наконец, последней операцией является копирование изображения из памяти в окно приложения. Для этого используется функция блочной передачи данных класса TDC BitBlt(), по своему назначению и


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

параметрам совпадающую с одноименной функцией API Windows, которую она инкапсулирует. Исполь­зованные в примере функции Width() и Height() принадлежат классу TBitmap и позволяют получить ши­рину и высоту созданное области памяти.

Контекст области памяти memdc, как это подробно описывалось в гл. 17, можно использовать для вывода в эту область, помимо растровых изображений, также и графических элементов, рисуемых с по­мощью перьев, кистей и шрифтов. Например, предложение

memdc.TextOut(102,4,"0") ;

(выполненное, разумеется, перед копированием изображения в окно) добавит к нашему изображению символ 0 (рис. 26.11).

Последнее замечание касается уничтожения создаваемых объектов. Все объекты, создаваемые в про­грамме в явном виде оператором new, необходимо в каком-то месте программы уничтожить (оператором delete). Проще всего для этого воспользоваться деструктором соответствующего класса. В нашем приме­ре уничтожение выделенной области памяти осуществляется в деструкторе класса MyWindow:

~MyWindow(){delete bitmap;}//Деструктор ради удаления bitmap




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