Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы программирования для информатиков и инженеров. Часть 2 Прикладное программирование в Windows.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
603.45 Кб
Скачать

9.3. Работа с перьями и кистями

 

Работа с перьями. Графические объекты рисуются при помощи текущего пера. Имеется три встро­енных системных пера: черноебелое и прозрачное. Дескриптор любого из yих можно получить с помощью функции GetStockObject(), которая была описана выше. Макро­сы, определяющие эти перья, называются соответственно BLACK_PEN, WHITE_PEN и NULL_PEN. Дескрипторы перьев имеют системный тип HPEN.

Количество встроенных перьев ограничено, и поэтому при написании приложе­ний Вам могут понадобиться собственные перья. Создать собственное перо можно при помощи функции CreatePen():

 

HPEN CreatePen(int style, int width, COLORREF color);

 

Параметр style определяет тип линии, создаваемой пером. Он может быть следующим (табл. 9.2):

 

Таблица 9.2

Типы линий, создаваемых пером

 

Макрос

Тип линии пера

1

PS_DASH

Пунктирная линия (равномерные отрезки)

2

PS_DASHDOT

Штрих-пунктирная линия (тире-точка-тире)

3

PS_DASHDOTDOT

Штрих-пунктирная линия (тире-точка-точка-тире)

4

PS_DOT

Точечная линия

5

PS_INSIDEFRAME

Сплошная линия внутри ограничивающей области

6

PS_NULL

Прозрачное перо

7

PS_SOLID

Сплошная линия

 

Любые стили, задающие прерывистые линии (точечные, пунктирные), примени­мы только к перьям, имеющим толщину в одну логическую единицу. Стиль PS_INSIDEFRAME определяет перо, рисующее сплошную линию внутри рисуемого объекта независимо от толщины пера. Например, если прямоугольник рисуется пером, имеющим стиль PS_INSIDEFRAME и толщину больше одного пикселя, нарисован­ные линии будут находится внутри заданных границ прямоугольника. При задании другого стиля пера часть линии толщиной более одного пикселя будет нарисована вне границ рисуемого объекта.

Толщина пера в логических единицах задается параметром width. Цвет пера определяется значением параметра color, который является переменной типа COLORREF (этот тип данных рассматривался в гл. 8). В примерах этой главы все цвета задаются с помощью RGB-значений.

После создания перо выбирается в контексте устройства при помощи функции SelectObject(). Так, следующий фрагмент программы создает красное перо и затем устанавливает его текущим для рисования:

 

HPEN hRedpen;

hRedpen=CreatePen(PS_SOLID,1,RGB(255,0,0));

SelectObject(dc,hRedpen);

 

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

Создание кисти. Кисти создаются так же, как и перья. Можно создавать кисти различных стилей, однако чаще всего используется сплошная кисть. Сплошная кисть создается при помощи функции CreateSolidBrush(), имеющей следующий прототип:

 

HBRUSH CreateSolidBrush(COLORREF color);

 

Цвет создаваемой кисти задается параметром color, а сама функция возвращает дескриптор кисти.

После создания кисть должна быть выбрана в контексте устройства с помощью функции SelectObject(). Например, следующий фрагмент создает зеленую кисть, а затем выбирает ее для заполнения объектов:

 

HBRUSH hGreenbrush;

hGreenbrush=CreateSolidBrush(RGB(0,255,0));

SelectObject (dc, hGreenbrush);

 

Как и перья, создаваемые кисти должны удаляться перед завершением программы.

Другие типы кистей, которые Вы можете изучить самостоятельно, – это штрихо­вая (hatch) кисть и кисть с растровым наполнением (pattern brush), создаваемые с помощью функций CreateHatchBrush() и CreatePatternBrush() соответственно.

Удаление объектов. Созданные Вами объекты необходимо удалить до того, как программа завершит­ся. Для, этого используется функция DeleteObject(). Помните, что нельзя удалять встроенные системные объекты. Кроме того, удаляемые объекты к моменту удаления не должны быть текущими в контексте устройства.