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


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


bitmap=new TBitmap(GetModule()->GetInstance(),"myPicture");//Загружаем изображение TMemoryDC memdc(dc);//Создаем совместимый с окном контекст памяти

memdc.SelectObject(*bitmap);//Выбор дескриптора  изображения в  совместимый контекст dc.BitBlt(10,80,bitmap->Width(),bitmap->Height(),memdc,0,0,SRCCOPY);//Копирование

Область памяти с растровым изображением создается конструктором класса TBitmap. Объект этого класса и будет представлять собой требуемую область. Поскольку область памяти с растром можно соз­дать различными способами (копированием, из буфера обмена и др.), в классе TBitmap описано несколь­ко (конкретно 10) конструкторов, отличающихся составом параметров. Для нашей программы мы вы­брали конструктор

TBitmap (HINSTANCE, TResID)

который создает область памяти для приложения с указанным дескриптором из заданного ресурса. В текст конструктора (см. файл bitmap.cpp в каталоге source\owl) входит вызов функции API Windows LoadBitmap(), что избавляет нас от необходимости заботиться о загрузке изображения - оно будет загру­жено автоматически в процессе создания экземпляра класса TBitmap.

Как получить дескриптор приложения, необходимый для вызова конструктора TBitmap? В классах TWindow и TFrameWindow, от которых происходит наш класс MyWindow, нет функций для получения дескриптора экземпляра приложения. Такая (открытая) функция Getlnstance() есть в классе TModule, но чтобы вызвать ее из конструктора класса MyWindow, надо указать объект класса TModule, для которого она вызывается. А вот для получения указателя на этот объект в классе TWindow есть функция GetMod-ule(). Это дает нам возможность получить для конструктора класса MyWindow первый параметр. Вторым параметром служит имя ресурса (у нас - myPicture), как оно записано в файле ресурсов.

Указатель на область памяти, создаваемую с помощью оператора new в конструкторе класса MyWin­dow, должен быть предварительно описан, как данное-член этого класса. Мы присвоили ему атрибут pri­vate, так как обращение к нему будет осуществляться исключительно из функций этого же класса, кон­кретно, из функции Paint().




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



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