- •Создание объекта класса и его связь с контекстом устройства
- •Компоненты класса
- •Hdc cdc::m_hAttribDc – дескриптор контекста устройства, используемый для получения параметров устройства.
- •Инициализация
- •Доступ к объектам рисования
- •Функции контекста устройства
- •Настройка процесса рисования
- •Функции средств рисования
- •Установка объектов рисования
- •Функции настройки цветов и палитр
- •Режимы рисования
- •Режим отображения
- •Настройка режимов отображения
- •Преобразование координат
- •Функции рисования
- •Отображение регионов
- •Рисование линий
- •Базовые функции рисования
- •Общие параметры функций
- •Отображение эллипсов и многоугольников
- •Int nLeftRect, // х-координата верхнего левого угла
- •Отображение битовых массивов
- •Функции, использующие битовые массивы
Доступ к объектам рисования
Функции с префиксом GetCurrent возвращают указатели на установленные (текущие) графические объекты – карандаши, кисти, битовые массивы, шрифты и палитры:
CPen* CDC::GetCurrentPen()
CBrush* CDC::GetCurrentBrush()
CBitmap* CDC::GetCurrentBitmap()
CFont* CDC::GetCurrentFont()
CPalette* CDC::GetCurrentPalette()
Все эти функции могут возвращать указатели на временные объекты соответствующих классов.
Функции контекста устройства
Функции этой группы обеспечивают доступ к дескрипторам контекстов (GetSafeHdc), осуществляют сохранение и восстановление параметров контекстов устройств (SaveDC и RestoreDC). К функциям этой группы относится также функция GetDeviceCaps, которая может быть использована для получения исчерпывающей информации о самом устройстве и соответствующем драйвере:
int CDC::GetDeviceCaps (int nIndex).
Параметр nIndex определяет тип требуемой информации.
Для создания приложения, универсального с точки зрения графического вывода на различные устройства, эту функцию просто необходимо использовать. Различие устройств в поддержке тех или иных возможностей графического вывода может потребовать помощи со стороны GDI или даже самого приложения.
Настройка процесса рисования
Графический вывод можно разделить на две составляющие: вывод текста и вывод графических примитивов. Функции обеих групп используют (и то не всегда) в качестве параметров только координаты вывода. Все остальные параметры, такие как цвет, стиль и т.д., задаются отдельно и действуют до их смены. Поэтому можно задавать параметры вывода сразу для группы последовательно вызываемых функций. Альтернативой такому способу могло бы быть наличие функций со многими параметрами, что затруднило бы сам процесс программирования. Кроме того, при желании всегда можно написать свою функцию, которая в зависимости от параметров, во-первых, осуществляет настройку режима рисования и, во-вторых, производит собственно рисование. Однако в рамках Windows это вряд ли оправданно, т.к. установка ряда параметров рисования осуществляется созданием специальных объектов рисования, максимальное число которых хоть и велико, но ограниченно. Создание таких объектов требует определенных дополнительных расходов, тогда как возможность использования текущих настроек для нескольких функций рисования такие расходы, естественно, снижает.
Класс CDC предоставляет программистам следующие группы функций настройки.
Функции средств рисования
Функции этой группы определяют базовые координаты для закрашивания объектов при помощи текущей установленной кисти (GetBrushOrg и SetBrushOrg) и позволяют получить информацию о системных карандашах и кистях (ЕпитObjects).
Так как кисти представляют собой прямоугольную область размером 88 пикселов, закрашивание с их помощью областей большего размера требует определенного согласования, иначе закраска не будет ровной. Например, линии штриховки будут иметь размер не больше 8 пикселов. Для осуществления такого согласования для кистей как раз и определяются базовые координаты.
Установка объектов рисования
Функции этой группы используются для установки объектов рисования, определяющих такие параметры рисования, как цвет и стиль линий, вид закрашивания, используемый шрифт и т.д.
Основная функция установки графических объектов – SelectObject. Библиотека MFC в классе CDC определяет пять функций для различных графических объектов:
CPen* CDC::SelectObject(СРеп* рРеn)
CBrush* CDC::SelectObject(CBrush* pBrush)
virtual CFont* CDC::SelectObject(CFont* pFont)
CBitmap* CDC::SelectObject(CBitmap* pBitmap)
int CDC::SelectObject(CRgn* pRgn)
Все эти функции, за исключением последней, в случае успешной установки возвращают указатель на графический объект соответствующего типа, ранее установленный для контекста устройства, и NULL – в противном случае. Причем указатель может указывать на временный объект и использоваться во время обработки одного сообщения Windows.
Последняя версия функции SelectObject по своему действию аналогична функции SelectClipRgn.
Битовые массивы можно устанавливать только для контекстов устройств в памяти. Причем один битовый массив не может быть установлен одновременно больше, чем для одного такого контекста. Битовый массив может быть либо монохромным, либо совместимым с контекстом устройства, т.е. созданным функцией СBitmap::Create Compatible Bitmap.
Кроме создаваемых в приложениях графических объектов, существуют и предопределенные системные, которые также можно применять. Для таких объектов следует использовать функцию SelectStockObject, устанавливающую в контексте устройства системные графические объекты различных типов.
Функция
virtual CGdiObject* CDC::SelectStockObject(int nIndex)
возвращает указатели на использованные ранее объекты в случае успешной замены и NULL – в противном случае. Новый объект задается параметром nIndex, имеющим следующие значения:
BLACK_BRUSH |
Черная кисть |
DKGRAY_BRUSH |
Темно-серая кисть |
GRAY_BRUSH |
Серая кисть |
LTGRAY_BRUSH |
Светло-серая кисть |
HOLLOW_BRUSH |
Пустая или прозрачная кисть |
NULL_BRUSH |
To же, что и HOLLOW_BRUSH |
WHITE_BRUSH |
Белая кисть |
BLACK_PEN |
Черный карандаш |
NULL_PEN |
Пустой или прозрачный карандаш |
WHITE_PEN |
Белый карандаш |
ANSI_FIXED_FONT |
Непропорциональный системный шрифт ANSI |
ANSI_VAR_FONT |
Пропорциональный системный шрифт ANSI |
DEVICE_DEFAULT_FONT |
Шрифт, зависимый от устройства |
OEM_FIXED_FONT |
Непропорциональный шрифт OEM |
SYSTEM_FONT |
Системный шрифт, используемый по умолчанию для отображения пунктов меню, текста элементов управления и т.д.; в версиях Windows, начиная с 3.0 системный шрифт пропорциональный |
SYSTEM_FIXED_FONT |
Непропорциональный системный шрифт, используется для совместимости с предыдущими версиями Windows |
DEFAULT_PALETTE |
Основная цветовая палитра, содержащая 20 цветов |
Системные кисти DKGRAY_BRUSH, GRAY_BRUSH и LTGRAY_BRUSH могут использоваться только для окон, имеющих стили CS_HREDRAW и CS_VREDRAW. Связано это с тем, что базовые координаты системных кистей не могут настраиваться, и при изменении размеров или положения окон их содержимое может быть испорчено.