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

typedef struct tag LOGBRUSH

{

         UINT                   lbStyle ;               // стиль кисти

         COLORREF        lbColor ;              // цвет  кисти

         LONG                  lbHatch ;              // тип штриховки или указатель на точечный рисунок

} LOGBRUSH ;

Члены структуры:

lbStyle                  определяет стиль кисти и должен принимать одно из следующих значений:

BS_HOLLOW                   пустая кисть

BS_NULL                          пустая кисть

BS_HATCHED                  штрихуемая кисть

BS_SOLID                         сплошная кисть

BS_PATTERN                   в качестве кисти используется точечный рисунок

lbColor                 определяет цвет кисти, если поле lbStyle равно BS_HATCHED или BS_SOLID;
игнорируется, если поле lbStyle равно BS_HOLLOW или BS_PATTERN.

lbHatch                определяет тип штриховки, если поле lbStyle равно BS_HATCHED. В этом случае поле может принимать те же значения, что и параметр nIndex в конструкторе класса CBrush.

Структура LOGBRUSH используется функциями CreateBrushIndirect и ExtCreatePen.

Создание кисти

Если кисть создана с помощью первого конструктора и является пустым объектом, то перед использованием его необходимо проинициализировать с помощью одной из следующих функций:

BOOL CreateSolidBrush ( COLORREF crColor ) ;

Функция создает однотонную кисть с заданным цветом.

BOOL CreateHatchBrush ( int nIndex , COLORREF crColor ) ;

Функция создает кисть со штриховкой заданного цвета и направления.

BOOL CreatePatternBrush ( CBitmap* pBitmap ) ;

Функция создает кисть на основе битового массива размером 8x8.

BOOL CreateBrushIndirect ( const LOGBRUSH* lpLogBrush ) ;

Функция создаёт кисть, используя двухцветный (1 бит на пиксель) точечный рисунок. Пиксели, представленные нулём рисуются текущим цветом текста. Пиксели, представленные единицей рисуются текущим цветом фона. Кроме того, может создавать однотонную кисть и кисть со штриховкой.

BOOL CreateDIBPatternBrush ( HGLOBAL hPackedDIB , UINT nUsage ) ;

BOOL CreateDIBPatternBrush ( const void* lpPackedDIB , UINT nUsage ) ;

Функция создает кисть на основе битового массива, который хранит изображение в независимом от устройства виде (Device-Independent Bitmap – DIB).

BOOL CreateSysColorBrush ( int nIndex ) ;

Функция создает кисть со штриховкой на основе системного цвета.

Пример создания и использования кисти

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

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

LOGBRUSH logBr ;                                           // объявляем образец физической кисти

logBrush.lbStyle = BS_HATCHED ;          // устанавливаем стиль штрихованной кисти

logBrush.lbColor = RGB ( 0 , 192 , 192 ) ;           // устанавливаем цвет штрихов

logBrush.lbHatch = HS_DIAGCROSS ;              // штриховка крест-накрест по диагонали

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

brush.CreateBrushIndirect ( &logBr ) ;              // создаём кисть по образцу

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

dc.Rectangle ( 20 , 20 , 100 , 100 ) ;                     // рисуем прямоугольник

Точечный рисунок. Класс CBitmap


Класс CBitmap инкапсулирует графический объект Windows – “точечный рисунок”. Точечный рисунок – это прямоугольная матрица целых чисел, каждое из которых кодирует цвет пикселя в прямоугольной области. Точечный рисунок используется при создании кисти, может отображаться в форме или элементе управления. Иерархия классов относительно класса CBitmap представлена на рисунке.

Создание точечного рисунка. Функция CreateBitmap

Для работы с объектом класса необходимо объявить сам объект, а затем инициализировать его с помощью одной из следующих функций: CreateBitmap, CreateBitmapIndirect, CreateCompatibleBitmap, CreateDiscardableBitmap.

Синтаксис функции CreateBitmap имеет вид:

BOOL CreateBitmap ( int nWidth, int nHeight, UINT nPlanes, UINT nBitCount, const void* lpBits ) ;