- •Создание объекта класса и его связь с контекстом устройства
- •Компоненты класса
- •Hdc cdc::m_hAttribDc – дескриптор контекста устройства, используемый для получения параметров устройства.
- •Инициализация
- •Доступ к объектам рисования
- •Функции контекста устройства
- •Настройка процесса рисования
- •Функции средств рисования
- •Установка объектов рисования
- •Функции настройки цветов и палитр
- •Режимы рисования
- •Режим отображения
- •Настройка режимов отображения
- •Преобразование координат
- •Функции рисования
- •Отображение регионов
- •Рисование линий
- •Базовые функции рисования
- •Общие параметры функций
- •Отображение эллипсов и многоугольников
- •Int nLeftRect, // х-координата верхнего левого угла
- •Отображение битовых массивов
- •Функции, использующие битовые массивы
Функции настройки цветов и палитр
Функции этой группы позволяют установить новую цветовую палитру (SelectPalette), перерисовать окно, заменяя ранее установленные цвета (UpdateColors), а также создать полутоновую кисть (GetHalftoneBrush), цвет которой получается в результате смешивания текущих цвета фона (background) и цвета, используемого для вывода текстовых строк (foreground).
Режимы рисования
Функции этой группы используются для настройки различных режимов рисования и закрашивания замкнутых областей. Основные функции мы рассмотрим подробнее, т.к. их значение для реализации графического вывода чрезвычайно важно. Все функции реализованы парами: с префиксом Get – позволяет получить текущее значение параметра, с префиксом Set – устанавливает новое значение и возвращает предыдущее. Далее следует описание наиболее часто используемых функций.
Функция
int CDC::SetBkMode (int nBkMode)
используется для установки режима закрашивания фона. Возможные режимы задаются параметром nBkMode, который может принимать следующие значения:
OPAQUE – (непрозрачный) фон закрашивается текущим цветом фона при выводе текста, несплошных линий или при использовании штриховых кистей; задано по умолчанию;
TRANSPARENT – (прозрачный) фон не меняется.
Функция
int CDC::SetPolyFillMode(int nPolyFillMode)
используется для установки режима закрашивания многоугольников. Возможные режимы задаются параметром nPolyFillMode (рис. 3):
ALTERNATE – режим закрашивания внутренних областей, находящихся между первой и второй, третьей и четвертой и т.д. линиями контура; задан по умолчанию;
WINDING – режим, при котором закрашиваются все внутренние области.
Для установки режима рисования или заливки используется функцияSetROP2. Название функции расшифровывается как "установка режима растровых (пиксельных) операций, использующих в качестве параметров два пиксела". Такими пикселами являются соответствующие друг другу точки экрана и отображаемого объекта.
Для функции
int CDC::SetROP2(int nDrawMode)
возможные режимы задаются параметром nDrawMode, который может принимать следующие значения:
R2_BLACK |
Пикселы будут черного цвета |
R2_WHITE |
Пикселы будут белого цвета |
R2_NOP |
Пикселы останутся без изменений |
R2_NOT |
Пикселы будут иметь инверсный по отношению к экрану цвет |
R2_COPYPEN |
Пикселы будут иметь цвет, заданный для текущего карандаша |
R2_NOTCOPYPEN |
Пикселы будут иметь инверсный цвет по отношению к цвету текущего карандаша |
R2_MERGEPENNOT |
Цвет пикселов получается в результате комбинирования цвета карандаша и инверсии цвета экрана ("цвет пиксела" = (NOT "цвет пиксела экрана") OR "цвет карандаша") |
R2_MASKPENNOT |
Цвет пикселов получается в результате комбинирования цвета карандаша и инверсии цвета экрана (''цвет пиксела" = (NOT "цвет пиксела экрана") AND "цвет карандаша") |
R2_MERGENOTPEN |
Цвет пикселов получается в результате комбинирования цвета экрана и инверсии цвета карандаша ("цвет пиксела" = (NOT "цвет карандаша") OR "цвет пиксела экрана") |
R2_MASKNOTPEN |
Цвет пикселов получается в результате комбинирования цвета экрана и инверсии цвета карандаша ("цвет пиксела" = (NOT "цвет карандаша") AND "цвет пиксела экрана") |
R2_MERGEPEN |
Цвет пикселов получается в результате комбинирования цвета экрана и цвета карандаша ("цвет пиксела" = "цвет карандаша" OR "цвет пиксела экрана") |
R2_NOTMERGEPEN |
Цвет пикселов получается в результате инверсии R2_MERGEPEN цвета ("цвет пиксела" = МОТ("цвет карандаша" OR "цвет пиксела экрана")) |
R2_MASKPEN |
Цвет пикселов получается в результате комбинирования цвета экрана и цвета карандаша ("цвет пиксела" = "цвет-карандаша" AND "цвет пиксела экрана") |
R2_NOTMASKPEN |
Цвет пикселов получается в результате инверсии R2_MASKPEN цвета ("цвет пиксела" = NOT("цвeт карандаша" AND "цвет пиксела экрана")) |
R2_XORPEN |
Цвет пикселов получается в результате комбинирования цвета экрана и цвета карандаша ("цвет пиксела" = "цвет карандаша" XOR "цвет пиксела экрана") |
R2_NOTXORPEN |
Цвет пикселов получается в результате инверсии R2_XORPEN цвета ("цвет пиксела" = NOT("4BeT карандаша" XOR "цвет пиксела экрана")) |
Вышеперечисленные режимы рисования линий поддерживаются только растровыми устройствами.
Для выбора режима сжатия битовых массивов используется функция SetStretchBltMode:
Функция
int CDC::SetStretchBltMode(int nStretchMode)
задает режим сжатия/увеличения изображений при использовании функции StretchBlt, в результате выполнения которой возможна потеря фрагментов изображения или их искажение. Возможные режимы задаются параметром nStretchMode, принимающим следующие значения:
STRETCH_ANDSCANS или BLACKONWHITE |
Цвет пикселов получается в результате комбинирования цвета удаляемых пикселов и остающихся с использованием операции AND; для монохромных изображений черные пикселы имеют приоритет над белыми |
STRETCH_DELETESCANS или COLORONCOLOR |
Режим простого удаления пикселов без попыток сохранить информацию об их цвете |
STRETCH_HALFTONE или HALFTONE |
При сжатии цвет пикселов результирующего блока "в среднем" сохраняется |
STRETCH_ORSCANS или WHITEONBLACK |
Цвет пикселов получается в результате комбинирования цвета удаляемых пикселов и остающихся с использованием операции OR; для монохромных изображений белые пикселы имеют приоритет над черными |
К этой же группе относятся функции для назначения и запроса цветов. Одни используются для цвета символов текста (функции SetTextColor и GetTextColor), а другие – для цвета фона (функции SetBkColor и GetBkColor). Цвет для символов текста используется только в случае, если текстовая строка выводится при помощи функций CDC::TextOut или CDC::ExtTextOut. Цвет фона используется для заливки промежутков несплошных линий, областей, закрашенных штрихованными кистями, а также просветов между символами текста. Для линий, выведенных с помощью карандашей, созданных с флагами PS_GEOMETRIC или PS_COSMETIC, цвет фона не используется.