
- •КОНТЕКСТ УСТРОЙСТВА
- •Класс CDC и его производные
- •Объявление контекста
- •РАБОТА С ТЕКСТОМ
- •Вывод текста. Функция TextOut
- •Вывод текста в прямоугольнике отсечения. Функция ExtTextOut
- •Цвет фона. Функции GetBkColor, SetBkColor
- •Цвет символов текста. Функции GetTextColor, SetTextColor
- •Выравнивание текста. Функции GetTextAlign, SetTextAlign
- •Пример рисования текста
- •ЦВЕТОВАЯ СИСТЕМА RGB
- •ДИАЛОГОВОЕ ОКНО ВЫБОРА ЦВЕТА
- •Конструктор класса CColorDialog
- •Отображение диалогового окна. Функция DoModal
- •Получение выбранного цвета. Функция GetColor
- •Пример использования диалогового окно выбора цвета
- •МОДЕЛЬ ПЕРЬЕВОГО ПЛОТТЕРА
- •Перемещение карандаша. Функция MoveTo
- •Рисование отрезка. Функция LineTo
- •Рисование точки. Функция SetPixel
- •Получение цвета точки. Функция GetPixel
- •РИСОВАНИЕ ГРАФИЧЕСКИХ ПРИМИТИВОВ
- •Рисование прямоугольника. Функция Rectangle
- •Рисование округлённого прямоугольника. Функция RoundRect
- •Рисование эллипса. Функция Ellipse
- •Рисование эллиптической дуги. Функция Arc
- •Рисование эллиптической дуги и хорды. Функция Chord
- •Рисование ломаной линии. Функция Polyline
- •КАРАНДАШ. КЛАСС CPEN
- •Конструкторы класса СРеn
- •Создание карандаша. Функция CreatePen
- •Создание указателя на карандаш. Тип HPEN
- •Использование объекта. Функция SelectObject
- •Получение атрибутов объекта. Функция GetObject
- •НАСТРОЙКА РЕЖИМА ОТОБРАЖЕНИЯ
- •Выбор единиц измерения. Функция SetMapMode
- •Размер прямоугольника. Структура SIZE
- •Получение размеров клиентской области. Функция GetClientRect
- •Пример настройки режима отображения
- •КИСТЬ. КЛАСС CBRUSH
- •Конструкторы класса CBrush
- •Образец физической кисти. Структура LOGBRUSH
- •Создание кисти
- •Пример создания и использования кисти
- •Создание точечного рисунка. Функция CreateBitmap
- •Создание ресурса точечного рисунка
- •Загрузка ресурса точечного рисунка. Функция LoadBitmap

Лекция 14 |
Работа с графикой |
11 |
nCount |
определяет количество точек в массиве (не менее 2) |
|
Назначение: рисует многоугольник, содержащий не менее двух вершин. Фигура всегда замкнута – если необходимо, то функция соединяет отрезком первую и последнюю вершины.
Синтаксис:
BOOL Polygon( LPPOINT lpPoints , int nCount ) ;
Параметры: те же, что и у функции Polyline .
Текущий способ заполнения многоугольника может быть получен и задан с помощью функций
GetPolyFillMode и SetPolyFillMode.
КАРАНДАШ. КЛАСС CPEN
Класс СРеn инкапсулирует графический объект Windows – “карандаш”. Карандаши используются для рисования различных линий и контуров объектов. Иерархия классов относительно класса СРеn представлена на рисунке.
CObject
CGdiObject
CPen
Конструкторы класса СРеn
В классе СРеn определены три конструктора, прототипы которых приведены ниже. Первый конструктор позволяет создавать объекты, не связанные с объектами Windows.
CPen ();
Второй конструктор предназначен для создания объектов класса с одновременным созданием карандашей Windows.
CPen ( int nPenStyle , int nWidth , COLORREF crColor ) ;
Параметры: nPenStyle
PS_SOLID
PS_NULL PS_INSIDEFRAME PS_DASH PS_DOT PS_DASHDOT PS_DASHDOTDOT
Значение последних четырёх флагов действительно, если ширина пера nWidth больше 1. В этом случае используется флаг PS_SOLID.
nWidth |
определяет ширину пера. Если это значение составляет 0, то ширина пера равна 1. |
crColor |
определяет цвет пера. |
Пример: создаём синий карандаш толщиной 3 единицы, который рисует сплошную линию.
Выжол Ю.А.
Лекция 14 |
Работа с графикой |
12 |
CPen penBlue ( PS_SOLID , 3 , RGB ( 0 , 0 , 255 )) ;
Третья версия конструктора предназначена для создания объектов класса с одновременным созданием карандашей Windows.
CPen ( int nPenStyle, int nWidth , const LOGBRUSH* pLogBrush , int nStyleCount = 0 , const DWORD* lpStyle = NULL );
Создание карандаша. Функция CreatePen
Если при создании объекта “карандаш” использован первый конструктор, то определить его параметры можно с помощью функции CreatePen. Функция CreatePen создает логический карандаш, которая имеет указанный стиль, ширину и цвет. Прототип этой функции имеет следующий вид:
HPEN CreatePen ( int nPenStyle , int nWidth , COLORREF crColor ) ;
Возвращаемое значение: указатель на карандаш, если функция успешно выполнена, и недействительное значение NULL в противном случае.
Параметры: те же, что и у второго конструктора класса CPen.
Пример: создаём красный карандаш толщиной 1 единица, который рисует линию из длинных штрихов.
CPen penRed ;
penRed.CreatePen ( PS_DASH , 0 , RGB ( 255 , 0 , 0 )) ;
Для каждой переменой типа CPen функция CreatePen может быть вызвана только один раз, т.е. параметры экземпляра класса карандаша нельзя изменить в ходе программы, но можно создать несколько карандашей и пользоваться ими по очереди.
Создание указателя на карандаш. Тип HPEN
В библиотеке MFC определён тип указателя на карандаш HPEN. Функция CreatePen может быть также использована для инициализации указателя на карандаш, который удобно использовать при работе с графикой.
Пример: создаём указатель на синий карандаш толщиной 3 единицы, который рисует сплошную линию.
HPEN hPenBlue = CreatePen ( PS_SOLID , 3 , RGB ( 0 , 0 , 255 )) ;
Использование объекта. Функция SelectObject
Контекст устройства содержит несколько объектов (карандаш, кисть, шрифт, растровую картинку и область отсечения) с параметрами, заданными по умолчанию. Карандаш, например, по умолчанию чёрный сплошной единичной толщины. Чтобы использовать созданный нами карандаш необходимо передать его параметры контексту устройства.
Для этой цели в классе CDC определено пять версий функции SelectObject, передающие контексту устройства адрес объекта, который мы хотим использовать при создании изображения. Прототипы версий этой функции имеют следующий вид:
CPen* SelectObject ( CPen* pPen ) ; |
// передаёт адрес карандаша |
CBrush* SelectObject ( CBrush* pBrush ) ; |
// передаёт адрес кисти |
virtual CFont* SelectObject ( CFont* pFont ) ; |
// передаёт адрес фонта |
CBitmap* SelectObject ( CBitmap* pBitmap ) ; |
// передаёт адрес растровой картинки |
int SelectObject ( CRgn* pRgn ) ; |
// передаёт параметры области отсечения |
Параметры: |
|
pPen |
указатель на объект типа CPen (карандаш), который выбран для использования. |
pBrush |
указатель на объект типа CBrush (кисть), который выбран для использования. |
pFont |
указатель на объект типа CFont (фонт), который выбран для использования. |
pBitmap |
указатель на объект типа CBitmap (растровая картинка), который выбран для |
|
использования. |
pRgn |
указатель на объект типа CRgn (область отсечения), который выбран для использова- |
|
ния. |
Пример: рисуем прямоугольник в текущем диалоговом окне с помощью определённого нами карандаша.
CClientDC dc ( this ) ; |
// контекст устройства – текущее диалоговое окно |
CPen penRed ( PS_SOLID , 2 , 255 ) ; |
// создаём сплошной красный карандаш |
dc.SelectObject ( &penRed ) ; |
// выбираем карандаш для использования |
RECT rt = { 20 , 20 , 40 , 40 } ; |
// объявляем и инициализируем прямоугольник |
Выжол Ю.А.