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

// получаем параметры клиентской области в пикселях

         GetClientRect ( &rtWin ) ;

// переносим начало координат в середину физической области

         dc.SetViewportOrg ( rtWin.right / 2 , rtWin.bottom / 2 ) ;

// устанавливаем флаг произвольной шкалы, как по оси X, так и по оси Y

         dc.SetMapMode ( MM_ANISOTROPIC ) ;

// устанавливаем размеры логической области

         dc.SetWindowExt ( n , n ) ;

// устанавливаем размеры физической области равными размерам клиентской области

// и изменяем направление оси Y

         dc.SetViewportExt ( rtWin.right , -rtWin.bottom ) ;

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

// рисуем оси координат

         CPen penBlack ( PS_SOLID , 5 , RGB(0,0,0)) ;   // объявляем сплошной чёрный карандаш

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

         dc.MoveTo (-400 , 0 ) ;  dc.LineTo ( 400 , 0 ) ;    // рисуем ось X

         dc.MoveTo ( 0 ,-400 ) ;  dc.LineTo ( 0 , 400 ) ;    // рисуем ось Y

// рисуем подписи осей координат

         COLORREF cr = dc.GetPixel (-499 , 499 ) ;        // определяем цвет фона окна

         dc.SetBkColor ( cr ) ;                                          // устанавливаем цвет фона текста

         dc.TextOut (410 , 25 ,"X") ;                                // рисуем подпись оси X

         dc.TextOut (-10 , 450 ,"Y") ;                               // рисуем подпись оси Y

}

Приведенный код выполняется в классе CMapeModeDlg при щелчке на кнопке IDC_PICTURE

В результате работы этого фрагмента кода в форме будет выведен следующий рисунок.

кисть. Класс CBrush


Иерархия классов относительно класса СРеn представлена на рисунке. Класс СРеn инкапсулирует графический объект Windows – “кисть”. Кисть используется для закрашивания замкнутых фигур.

Конструкторы класса CBrush

В классе CBrush определено четыре конструктора, прототипы которых имеют вид:

CBrush ( ) ;                                                         // создает пустой объект

CBrush ( COLORREF crColor ) ;                       // создает однотонную кисть

CBrush ( int nIndex , COLORREF crColor ) ;    // создает кисть со штриховкой

CBrush ( CBitmap* pBitmap ) ;                // создает кисть на основе битового массива размером 8x8

Параметры:

crColor                определяет цвет штрихов

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

HS_HORIZONTAL           горизонтальная штриховка

HS_VERTICAL                          вертикальная штриховка

HS_BDIAGONAL              45-градусная штриховка слева направо и сверху вниз

HS_FDIAGONAL              45-градусная штриховка слева направо и снизу вверх

HS_CROSS                                 горизонтальная и вертикальная штриховка крест-накрест

HS_DIAGCROSS              45-градусная штриховка крест-накрест

pBitmap                        указатель на объект типа CBitmap, который определяет точечный рисунок, используемый в качестве шаблона

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

Пример: рисуем прямоугольник в текущем диалоговом окне с помощью определённой нами кисти.

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

COLORREF crYell = 0xFFFF ;                          // объявляем жёлтый цвет для фона

COLORREF crBlue = 0xFF0000 ;                       // объявляем синий цвет для штрихов

CBrush brush ( HS_CROSS , crBlue ) ;              // объявляем кисть со штриховкой крест-накрест

dc.SetBkColor ( crYell ) ;                                    // устанавливаем жёлтый фон

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

RECT rt = { 20 , 20 , 140 , 140 } ;                        // объявляем и инициализируем прямоугольник

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

Образец физической кисти. Структура LOGBRUSH

Структура LOGBRUSH определяет стиль, цвет, и образец физической кисти и объявлена в библиотеке MFC следующим образом: