Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VC Лекции PDF / VC 15 Лек Графика.pdf
Скачиваний:
41
Добавлен:
15.02.2015
Размер:
651.21 Кб
Скачать
сплошная линия. прозрачная линия.
сплошная линия для рисования по внутренней границе замкнутой области длинные штрихи.
короткие штрихи. штрих-пунктир. штрих-пунктир-пунктир.
определяет стиль пера. Этот параметр может принимать одно из следующих значений:
// объявление и инициализация массива вершин креста
POINT ptD [ n ] = {{ x-h , y } , { x , y } , { x , y-h } , { x , y } , { x+h , y } , { x ,y } , { x , y+h }} ; dc.Polyline ( ptD , n ); // рисование креста
Рисование многоугольника. Функция Polygon
// длина луча
// координаты центра креста
// количество точек в массиве
// контекст устройства – текущее диалоговое окно
Пример: В приведённом ниже примере создаётся массив точек, определяющих крест. Массив содержит 7 точек – 4 вершины и центр креста, который используется трижды. Крест рисуется с помощью ломаной линии с центром в точке x, y.
CClientDC dc ( this ) ; const n = 7 ;
int x = 200 , y = 100 ; int h = 10 ;

Лекция 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 } ;

// объявляем и инициализируем прямоугольник

Выжол Ю.А.