Контекст устройства. Работа с текстом. Диалоговое окно выбора цвета. Настройка режима отображения. Точечный рисунок. Класс CBitmap, страница 13

Параметры:

nWidth, nHeight            определяет ширину и высоту точечного рисунка в пикселях.

nPlanes                          определяет число цветов в точечном рисунке.

nBitCount                      определяет число битов за пиксель.

lpBits                             указатель на массив коротких целых чисел, который содержит разрядные значения точечного рисунка. Если параметр недействителен, то новый точечный рисунок оставлен без инициализации.

В том случае если пиксель кодируется одним битом (nBitCount = 1), то пиксель которому соответствует значение бита равное 1 закрашивается цветом фона, 0 – цветом текста. Цвет фона и текста можно установить с помощью функций SetBkColor и SetTextColor соответственно.

Пример: В приведённом ниже примере объявлен и проинициализирован массив bit , состоящий из 8 целых чисел типа WORD. Каждое число кодирует 8 пикселей одной из 8 строк. На базе массива bit с помощью функции CreateBitmap  создаётся точечный рисунок bm размером 8 x 8. В точечный рисунке крайний правый и самый нижний ряды пикселей имеют цвет текста, остальные пиксели – цвет фона. Далее создаётся кисть brush, которая использует созданный точечный рисунок bm. Кисть brush используется при рисовании прямоугольника.

CClientDC dc ( this ) ;                                         // контекст устройства - текущее диалоговое окно

WORD p = 0xFE ;                                               // двоичный код = 11111110

WORD bit [ 8 ] = {p,p,p,p,p,p,p,0} ;                    // массив из 8 битовых строк

dc.SetBkColor ( dc.GetPixel ( 0 , 0 )) ;                 // устанавливаем цвет фона равным цвету фона окна

CBitmap bm ;                                                      // объявляем точечный рисунок

bm.CreateBitmap ( 8 , 8 , 1 , 1 , bit ) ;                 // инициализируем точечный рисунок размером 8 x 8

CBrush brush ;                                                   // объявляем пустую кисть

brush.CreatePatternBrush ( &bm ) ;                   // создаём на основе точечного рисунка

dc.SelectObject ( brush ) ;                                   // выбираем кисть для использования

dc.Rectangle ( 23 , 23 , 89 , 89 ) ;                         // рисуем закрашенный прямоугольник

Создание ресурса точечного рисунка

Интегрированная среда разработки Visual Studio 6 позволяет создавать точечные рисунки с помощью встроенного графического редактора. Для этого нужно

Ø  в меню Insert выбрать команду Resource

Ø  в диалоговом окне Insert Resource в поле Resource type выбрать Bitmap и нажать кнопку New

Встроенный графический редактор позволяет создавать 256-цветные рисунки произвольного размера. При создании рисунка пользователю доступны команды рисования простейших примитивов с помощью мыши: точки, прямой, эллипса, прямоугольника и др.

Библиотека MFC позволяет использовать в программе готовые точечные рисунки, содержащие и более чем 256 цветов. Для включения готового точечного рисунка в проект нужно

Ø  в диалоговом окне Insert Resource нажать кнопку Import

Ø  в диалоговом окне открытия файла выбрать файл и нажать кнопку Import

Ресурс типа Bitmap, как и любой другой ресурс, в откомпилированной программе хранится в исполняемом файле, но загружается в оперативную память только после выполнения соответствующей команды загрузки ресурса. Ресурс выгружается из оперативной памяти, если он не требуется для выполнения программы.

Загрузка ресурса точечного рисунка. Функция LoadBitmap

Загрузить ресурс точечного рисунка можно с помощью функции LoadBitmap.

BOOL LoadBitmap ( UINT nIDResource ) ;

BOOL LoadBitmap ( LPCTSTR lpszResourceName ) ;

Параметром функции может быть идентификатор ресурса nIDResource или строка. содержащая имя идентификатора ресурса lpszResourceName.

Загруженный точечный рисунок присоединен к объекту типа CBitmap.

Пример: В приведённом ниже примере точечный рисунок загружается из ресурса с идентификатором IDB_BIT.

CBitmap bm ;                                            // объявляем точечный рисунок

bm.LoadBitmap ( IDB_BIT ) ;                   // загружаем точечный рисунок из ресурса с IDB_BIT