- •Режимы рисования, устанавливаемые вызовом функции cdc::SetRop2()
- •Задание 1. Создание объектов контекста устройства, инструментов рисования и демонстрация режимов отображения
- •Создание графических изображений закраской пикселов
- •Задание 2. Цветовая закраска пикселов при создании узоров
- •Подведение итогов
- •Глава 11. Использование функций рисования
- •Функции рисования графических примитивов
- •Рисование прямых и кривых линий
- •Рисование фигур с замкнутым контуром
- •Дополнительные функции рисования класса cdc
- •Задание 1. Демонстрация графических примитивов
функции и атрибуты рисования, наиболее подходящие для средств, рассмотренных в данной главе. Прототипы функций рисования будут рассмотрены в параграфе «Создание графических изображений».
Рассмотрим более подробно особенности атрибутов режима рисования и режима фона.
Стиль, толщина и цвет линий определяются типом пера, выбранного в текущий момент в объекте контекста устройства. Термин линия относится либо к прямой линии, либо к кривой. На рисование линий также влияет текущий режим рисования, который описывает способ комбинирования цвета пера с текущим цветом дисплея. Окончательный цвет каждого пиксела линии зависит от текущего цвета пиксела, цвета пера и режима рисования. В стандартном режиме рисования R2_COPYPEN система Windows просто копирует цвет пера на дисплей, т.е. пикселы инструмента рисования копируются поверх пикселов растрового изображения устройства. Например, если перо красное, каждый пиксел нарисованной линии будет окрашен красным цветом, независимо от текущего цвета растрового изображения устройства. Режим рисования можно изменить, вызвав функцию-член SetROP2() класса CDC и передав ей в качестве аргумента значение режима рисования.
int CDC::SetROP2 (int nDrawMode);
Параметр nDrawMode описывает желаемый режим рисования.
Т а б л и ц а 10.4
Режимы рисования, устанавливаемые вызовом функции cdc::SetRop2()
Значение параметра dDrawMode |
Цвет каждого пиксела рисуемой фигуры |
R2_COPYPEN (Стандартный режим) |
Цвет пера |
R2_NOTCOPYPEN |
Инверсный цвету пера |
R2_NOT |
Инверсный цвету фона |
R2_BLACK |
Черный |
R2_WHITE |
Белый |
R2_NOP |
Не изменяется |
Существует 16 возможных режимов рисования. Наиболее распространенные из них перечислены в табл. 10.4. Полный перечень режимов рисования приводится в табл. В5 приложения В. В табл. 10.4 приведен результирующий цвет каждого пиксела линии, нарисованной в соответствии с используемым режимом рисования. Так, при выборе стандартного режима R2_COPYPEN линия будет нарисована цветом пера. При выборе режима рисования R2_NOT линия будет нарисована цветом, инверсным по отношению к экрану. Этот метод рисования имеет несколько преимуществ. Во-первых, линия видна на экране любого цвета; во-вторых, можно использовать режим R2_NOT для рисования видимой линии внутри области, содержащей смесь цветов. При повторном рисовании этой же линии она автоматически удаляется, а цвет экрана восстанавливается. Этот режим можно использовать для рисования прямоугольников выборки, создания анимации и других целей.
При рисовании прерывистых линий, использующих стили PS_DASH, PS_DOT, PS_DASHDOT или PS_DASHDOTDOT, цвет, используемый для закрашивания пробелов в линии, зависит от текущего режима фона и его цвета. Напомним, что режим фона устанавливается вызовом функции CDC::SetBkMode().
int SetBkMode (int nBkMode);
Если аргументу nBkMode присвоено значение по умолчанию OPAQUE, пропуски внутри линий будут закрашены текущим цветом фона. Если присвоено значение TRANSPARENT, пробелы не закрашиваются, экранные цвета остаются неизменными. Цвет фона устанавливается при вызове CDC::SetBkColor().
virtual COLORREF SetBkColor (COLORREF crColor);
Текущий режим рисования, установленный при вызове функции CDC::SetROP2(), влияет на способ формирования границ и внутренних областей замкнутых фигур так же, как на рисование линий. Режим и цвет фона, заданные функциями CDC::SetBkMode() и CDC::SetBkColor(), влияют на фигуры с замкнутыми контурами следующим образом. Если выбрано перо для прерывистой линии (созданное в стиле PS_DASH, PS_DOT, PS_DASHDOT или PS_DASHDOTDOT), то режим и цвет фона управляют рисованием пробелов в границах фигур. В режиме OPAQUE пробелы заполняются цветом фона, а в режиме TRANSPARENT — не заполняются. Если используется кисть со штриховкой, созданная вызовом CDC::CreateHatchBrush(), то режим и цвет фона управляют заполнением пробелов между линиями штриховки, т.е. в режиме OPAQUE пробелы закрашиваются цветом фона, а в режиме TRANSPARENT пробелы не закрашиваются.
Если используется кисть с узорами, созданная вызовом CDC::CreateHatchBrush() или CDC::CreatePatternBrush(), то для выравнивания заполняющего узора вызывают функцию SetBrushOrg() класса CDC.
Получить значение текущего режима рисования можно, вызвав функцию CDC::GetROP2().
Режим заполнения многоугольников определяется функцией CDC::SetPolyFillMode() с таким прототипом:
int SetPolyFillMode( int nPolyFillMode );
Функция CDC::SetPolyFillMode() принимает в качестве аргумента одно из следующих значений: ALTERNATE или WINDING.
Для демонстрации использования объектов контекста устройства и пера, режимов отображения и атрибутов рисования некоторых графических фигур выполните упражнение 1.