Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
321-352.doc
Скачиваний:
6
Добавлен:
11.11.2019
Размер:
521.73 Кб
Скачать

355

функции и атрибуты рисования, наиболее подходящие для средств, рассмотренных в данной главе. Прототипы функций рисования будут рассмотрены в параграфе «Создание графических изображений».

Рассмотрим более подробно особенности атрибутов режима рисования и режима фона.

Стиль, толщина и цвет линий определяются типом пера, выбранного в текущий момент в объекте контекста устройства. Термин линия относится либо к прямой линии, либо к кривой. На рисование линий также влияет текущий режим рисования, который описывает способ комбинирования цвета пера с текущим цветом дисплея. Окончательный цвет каждого пиксела линии зависит от текущего цвета пиксела, цвета пера и режима рисования. В стандартном режиме рисования 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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]