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

Значения, передаваемые в макрос rgb() для генерации стандартных чистых цветов vga

Цвет, доступный в режиме VGA

Значения bRed, bGreen и bBlue кодов RGB

Темно-красный (dark red)

128, 0, 0

Светло-красный (light red)

255, 0, 0

Темно-зеленый (dark green)

0, 128, 0

Светло-зеленый (light green)

0, 255, 0

Темно-синий (dark blue)

0, 0, 128

Светло-синий (light blue)

0, 0, 255

Темно-желтый (dark yellow)

128, 128, 0

Светло-желтый (light yellow)

255, 255, 0

Темно-бирюзовый (dark cyan)

0, 128, 128

Светло-бирюзовый (light cyan)

0, 255, 255

Темно-сиреневый (dark magenta)

128, 0, 128

Светло-сиреневый (light magenta)

255, 0, 255

Черный (black)

0, 0, 0

Темно-серый (dark gray)

128, 128, 128

Светло-серый (light gray)

192, 192, 192

Белый (white)

255, 255, 255

Перу присваивается только чистый цвет. Если присвоить перу цветовой код, который не относится ни к одному из чистых цветов, то линия будет нарисована с использованием ближайшего чистого цвета. Исключение из этого правила существует в случае, если перо имеет стиль PS_INSIDEFRAME и ширину более 1 пиксела, тогда Windows использует полутона, если присвоенный цвет не является чистым.

Кисть можно инициализировать так, чтобы она окрашивала однородным цветом внутреннюю область фигур. Для этого вызовите функцию CBrush::CreateSolidBrush() с параметром crColor, описывающим цвет заливки. Можно задать любой цвет. Если присвоенный цвет не является чистым, то Windows генерирует псевдополутоновой цвет, полученный имитацией полутонов. Прототип функции определен таким образом:

BOOL CBrush::CreateSolidBrush (COLORREF crColor);

Кроме того, для заливки внутренней области фигур можно инициализировать кисть, вызвав функцию CreateHatchBrush() класса CBrush.

BOOL CBrush::CreateHatchBrush (int nIndex, COLORREF crColor);

Параметр nIndex задает тип штриховки в соответствии с рис. 10.3. Параметр crColor описывает цвет линий штриховки.

Рис. 10.3. Значения, которые присваиваются параметру nIndex функции CBrush::CreateHatchBrush() для инициализации кисти со штриховкой

Функция CBrush::CreatePatternBrush() вызывает кисть для заполнения фигуры заданным узором.

BOOL CBrush::CreatePatternBrush (CBitmap* pBitmap);

Параметр pBtimap является указателем на объект растрового изображения. Если фигура рисуется с помощью кисти, то ее внутренняя область полностью заполняется копиями растрового изображения, размещаемыми одна возле другой. Задайте размер растрового изображения равным 8  8 пикселов. Если растровое изображение монохромное, то Windows использует текущие цвета текста и фона.

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

CPen* CDC::SelectObject( CPen* pPen ); //выбор пера

где pPen — указатель на объект-пера. Функция CDC::SelectObject() возвращает указатель на предыдущий объект пера, выбранный в объекте контекста устройства. Если перо ранее не выбиралось, это будет временный объект пера, заданный по умолчанию.

Для выбора объекта кисти вызывается функция с таким прототипом:

CBrush* CDC::SelectObject (CBrush* pBrush); //выбор кисти

где pBrush — указатель на объект-кисть. Функция CDC::SelectObject() возвращает указатель на ранее выбранный объект кисть. Если она ранее не выбиралась, то это будет временный объект для заданной по умолчанию кисти.

Для выбора объекта шрифта используется функция с таким прототипом:

CFont* CDC::SelectObject( CFont* pFont ); //выбор шрифта

где pFont — указатель на объект шрифта. Функция CDC::SelectObject() возвращает указатель на ранее выбранный объект шрифт. Если шрифт ранее не выбирался, то выбранный объект будет временным для заданного по умолчанию шрифта.

Выбор растрового изображения выполняется с помощью функции, имеющей следующий прототип:

CBitmap* CDC::SelectObject( CBitmap* pBitmap);//выбор рисунка

Аналогично предыдущим версиям функции выбора объектов pBitmap — указатель на объект растрового изображения.

Для выбора области отсечения необходимо в функцию выбора передать указатель на объект региона.

int CDC::SelectObject( CRgn* pRgn ); //выбор области отсечения

Перед завершением программы объекты GDI необходимо удалять, предварительно отсоединив их от объекта контекста устройства. GDI-объект, который вы забыли отсоединить, может занимать значительный объем памяти. Удаления GDI-объектов выполняется деструкторами производных от CGdiObject классов или функцией CGdiObject::DeleteObject().

BOOL CGdiObject::DeleteObject( );

Однако, не отсоединив объект GDI от объекта контекста устройства, невозможно его удалить. Для отсоединения объекта GDI от объекта контекста устройства используется та же функция CDC::SelectObject(). Дело в том, что функция CDC::SelectObject() выбирает GDI-объекты в объект контекста устройства и возвращает указатель на объект, который был выбран в контекст раньше и теперь отсоединен. Поскольку нельзя отсоединить старый объект, не выбрав в контекст новый, то необходимо сохранить возвращаемый функцией CDC::SelectObject() указатель на первоначальный объект GDI при выборе нового объекта в контексте устройства. После вызова графических функций для отображения выводимой информации с использованием созданных пера или кисти необходимо восстановить первоначальный объект GDI, передав в качестве аргумента в функцию CDC::SelectObject() указатель на первоначальный объект. Удаление объектов GDI выполняется функцией, определенной таким образом:

BOOL CGdiObject::DeleteObject();

Перо или кисть необходимо удалить из объекта контекста устройства, чтобы последний не хранил некорректный дескриптор после удаления объекта. При инициализации пера или кисти Windows добавляет дескриптор, сохраняемый внутри объекта. При выборе пера или кисти объект контекста устройства также сохраняет этот дескриптор. Когда объекты выходят за пределы области видимости или удаляются, деструктор объекта уничтожает дескриптор. Однако этот шаг не нужно выполнять, если объект контекста устройства удаляется до удаления объекта пера или кисти.

Пример функции OnDraw() класса представления иллюстрирует описанные действия.

void CMyView::OnDraw(CDC* pDC) { CBrush NewBrush; //объявить объект кисть CPen NewPen; //объявить объект перо CBrush *PtrOldBrush; //сохранить указатель на предыдущую //кисть CPen *PtrOldPen; //сохранить указатель на предыдущее перо //инициализировать сплошное синее перо шириной 3 пикселя NewPen.CreatePen (PS_SOLID, 3, RGB (0, 0, 255)); //инициализировать сплошную желтую кисть NewBrush.CreateSolidBrush (RGB (255, 255, 0)); //передать перо объекту контекста устройства PtrOldPen = pDC->SelectObject (&NewPen); //передать кисть объекту контекста устройства PtrOldBrush = pDC->SelectObject (&NewBrush); //установить любые требуемые атрибуты рисования ... //вызвать функции рисования для создания графического вывода //(линии и границы будут синими, внутренняя площадь фигур //будет желтой); //удалить новые перо и кисть из объекта контекста устройства: pDC -> SelectObject (PtrOldPen); pDC -> SelectObject (PtrOldBrush); NewPen.DeleteObject(); Newbrush.DeleteObject(); }

Для выполнения графического вывода в окно представления или другое окно используют функции рисования класса CDC. Перечень некоторых функций мы рассмотрим в параграфе «Создание графических изображений». Но прежде познакомимся с эффектами различных режимов отображения координат.

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