пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

Использование перьев. Работа с кистью.

 

Использование перьев

Для пера требуется определить стиль начертания линии, ее толщину и цвет. Рассмотрим функцию ShowPens() , которая формирует различные типы перьев в теле цикла for.

 

void CPaint1View::ShowPens(CDC * pDC)

зн

// Инициализировать положение линии.

UINT position =10;

// Начертить шестнадцать линий.

for (UINT x=0; х<16; ++х)

зн

// Сформировать новое перо и выбрать его в контекст.

CPen pen(PS_SOLID, x*2+1, RGB(0, 0, 255));

CPen* oldPen = pDC->SelectObject(&pen);

// Начертить линию новым пером.

position += x * 2 + 10;

pDC->MoveTo(20, position);

pDC->LineTo(400, position);

// Восстановить прежнее перо в контексте.

pDC->SelectObject(оldPen);

зн

зн

В теле цикла ShowPens() сначала формирует новое перо — экземпляр класса CPen. Конструктору требуется передать три параметра. Первый— стиль линии. Варианты стилей:

Стиль                                      Описание'

PS DASH                        Перо вычерчивает штриховую линию

PS DASHDOT                Перо вычерчивает штрихпунктирную линию

PS DASHDOTOOT        Перо вычерчивает штрихпунктирную линию с двумя точками

PS DOT                           Перо вычерчивает пунктирную линию

PS INSIDEFRAME        Перо используется для вычерчивания линий внутри замкнутого контура

PS NULL                        Перо вычерчивает невидимую линию

PS SOLID                       Перо вычерчивает сплошную линию

Только сплошные линии могут иметь регулируемую толщину. Все линии, вычерчиваемые по шаблону, должны иметь толщину 1. Второй параметр — толщина линии, которая увеличивается в каждом последующем цикле. Третий параметр— цвет линии. Макрос RGB принимает три значения соответственно для красной, зеленой и синей составляющих, и преобразует их в комбинированный код цвета, воспринимаемый Windows. Значения интенсивностей компонентов находятся в диапазоне 0-255 (естественно, чем больше величина, тем более интенсивный цвет).

 

RGB(0, 0, 0), // черный

RGB(255,0, 0), // красный

RGB (0,255., 0), // зеленый

RGB(0,0, 255), // синий

RGB(255,255, 0), // желтый

RGB(255,0, 255), // пурпурный

RGB(0,255,255), // голубой

RGB(127,127, 127), // серый

RGB(255,255, 255)зн;// белый

 

Тот код, который присутствует во фрагменте текста в листинге, задает синий цвет максимальной интенсивности. Если все компоненты цвета будут равны нулю, получим абсолютно черное перо; максимальное значение всех компонентов создаст белое перо.

Покончив с созданием нового пера, функция ShowPens() выбирает его в контекст, сохраняя, тем не менее, указатель старого пера. Метод MoveTo() перемещает перо в точку с координатами X,Y без вычерчивания; метод LineТо() собственно и выполняет вычерчивание, "передвигая" перо вдоль прямой линии. При этом используются заказанные стиль, толщина и цвет пера. И последнее — в контексте восстанавливается прежнее перо.

Работа с кистью

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

 

void CPaintlView::ShowBrushes(CDC * pDC)

зн                                 '

// Инициализировать расположение прямоугольника.

UlNT position = 0;

//Выбрать перо для вычерчивания контура прямоугольника.

СРеn pen(PS_SOLID, 5, RGB(255, 0, 0));

CPen* oldPen = pDC->SelectObject(&pen);

// Начертить семь прямоугольников.

for (UINT x=0; x<7; ++x)

зн

CBrush* brush;

// Создать сплошную или заштрихованную кисть

if(x==6)

brush = new CBrush(RGB(0,255,0));

else

brush = new CBrush(x, RGB(0,160,0));

//Выбрать новую кисть в контекст.

CBrush* oldBrush = pDC->SelectObject(brush);

// Начертить прямоугольник.

position += 50;

pDC->Rectangle(20, position, 400, position + 40);

// Восстановить контекст и стереть кисть.

pDC->SelectObject(oldBrush);

delete brush;

зн

//Восстановить прежнее перо в контексте

pDC->SelectObject(oldPen);

зн

Все прямоугольники, закрашиваемые различными кистями, будут вычерчены с видимой линией контура. Для этого нужно создать перо (стиль — сплошное, толщина — 5 пикселей, цвет— ярко-красное) и выбрать его в контекст устройства. Оно будет безо всяких на то дополнительных указаний использовано для вычерчивания контуров прямоугольников. Подобно функции ShowPensO, эта программа также использует для демонстрации кистей цикл for. Однако в отличие от предыдущей функции новые объекты (в этой функции — кисти) создаются вызовом new. Это позволяет использовать то конструктор с одним аргументом, который создает сплошную кисть, то конструктор с двумя аргументами, который создает трафаретную кисть.

Первый аргумент двухаргументного конструктора есть переменная цикла х;

Обычно вам не нужно показывать все трафареты заливки, следует только выбрать некоторый Подходящий. Можно использовать одну из перечисленных ниже констант трафаретов.

 

•HS..HORIZONTAL (горизонтальный)

•HS_VERTICAL (вертикальный)

•HS_CROSS (прямая клетка)

•HS_FDIAGONAL (диагональный, наклон влево)

•HS_BDIAGONAL (диагональный, наклон вправо)

•HS_D I AGONALCROSS (косая клетка)

 

В теле цикла в контекст выбирается один из этих трафаретов, определяется положение очередного прямоугольника в поле окна и затем вызывается функция Rectangle(), которая и использует контекст с включёнными в: него пером и кистью. После всего этого в контексте восстанавливается прежняя кисть. После выхода из цикла в контексте восстанавливается и перо.

Метод Rectang1е() — это только один из методов, используемых для построения на экране замкнутых фигур. Rectanglе()использует в качестве аргументов координаты левого верхнего и правого нижнего углов вычерчиваемого прямоугольника: Среди других методов, представляющих определенный интерес,—Chord (), , Ellipse(), Pie() - сектор, Polygon() - многоугольник, PolyPolygon() – массив многоугольников, Polyline() – линия, соединяющая массив точек, и RoundRect() – прямоугольник со скругленными углами.


18.01.2020; 20:26
хиты: 49
рейтинг:0
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь