- •Создание объекта класса и его связь с контекстом устройства
- •Компоненты класса
- •Hdc cdc::m_hAttribDc – дескриптор контекста устройства, используемый для получения параметров устройства.
- •Инициализация
- •Доступ к объектам рисования
- •Функции контекста устройства
- •Настройка процесса рисования
- •Функции средств рисования
- •Установка объектов рисования
- •Функции настройки цветов и палитр
- •Режимы рисования
- •Режим отображения
- •Настройка режимов отображения
- •Преобразование координат
- •Функции рисования
- •Отображение регионов
- •Рисование линий
- •Базовые функции рисования
- •Общие параметры функций
- •Отображение эллипсов и многоугольников
- •Int nLeftRect, // х-координата верхнего левого угла
- •Отображение битовых массивов
- •Функции, использующие битовые массивы
Преобразование координат
В описании большинства функций рисования указано, что координаты задаются в логических единицах, величина которых зависит от установленного режима. Однако, ряд функций продолжают понимать только физические единицы устройства – пикселы – и для них необходимо осуществлять преобразование координат.
Функции этой группы предназначены для преобразования логических координат в физические и наоборот (LPtoDP и DPtoLP). Кроме того, четыре функции – DPtoHIMETRIC, LPtoHIMETRIC, HIMETRICtoDP и HIMETRICtoLP – используются для преобразования координат при передаче размеров объекта OLE и при их получении.
Функции рисования
Итак, параметры заданы, объекты рисования выбраны, режимы установлены – можно рисовать. Давайте рассмотрим, какие возможности предоставляет нам класс CDC для рисования различных графических объектов.
Отображение регионов
Функции этой группы позволяют рисовать рамки (FrameRgn), закрашивать (FillRgn и PaintRgn) и инвертировать цвета регионов (InvertRgn).
Отсечения
Функции этой группы добавляют/исключают области отсечения, которые используются для ограничения области перерисовки (SelectClipRgn, ExcludeClipRect, ExcludeUpdateRgn и IntersectClipRect). Кроме того, некоторые функции группы, например GetClipBox и PtVisible, позволяют определить текущую область отсечения для программного исключения перерисовки части рисунка, что в ряде случаев существенно сокращает время вывода. Для повторного вывода сложного объекта могут потребоваться не только многократные вызовы функций настройки различных параметров и функций собственно вывода, и длительный процесс вычисления (например, при выводе контуров трехмерных объектов).
Рисование линий
Функции этой группы предназначены для рисования прямых (LineТо), гладких (Arc, ArcTo и AngleArc) и ломаных линий (Polyline, PolylineTo, PolyPolyline, PolyBezier, PolyBezierTo и PolyDraw), установленных в момент рисования карандашом. Часть функций меняют при этом текущее положение карандаша (LineTo, ArcTo, PolylineTo и PolyBezierTo), другие – нет. Даже если в результате рисования контур получается замкнутым, закрашивание не осуществляется.
Базовые функции рисования
Функции этой группы осуществляют рисование закрашенных простейших объектов, прежде всего прямоугольников (FillRect, FillSolidRect и InvertRect) с возможностью задания различного типов рамок (FrameRect, Draw3dRect, DrawEdge). К группе относятся функции рисования пиктограмм и битовых массивов (DrawIcon и DrawState) и элементов управления – кнопок, меню, заголовков окон и полос прокрутки (DrawFrameControl). Большинство функций используют для рисования текущие карандаш и кисть.
Остановимся на функции, вернее, на функциях DrawState немного подробнее.
Битовые массивы | |
BOOL CDC::DrawState ( CPoint pt, CSize size, HBITMAP hBitmap, UINT nFlags, HBRUSH hBrush = NULL) |
BOOL CDC::DrawState ( CPoint pt, CSize size, CBitmap* pBitmap, DINT nFlags, CBrush* pBrush = NULL) |
Пиктограммы | |
BOOL CDC::DrawState ( CPoint pt, CSize size, HICON hIcon, UINT nFlags, HBRUSH hBrush = NULL) |
BOOL CDC::DrawState ( CPoint pt, CSize size, HICON hIcon, UINT nFlags, CBrush* pBrush = NULL) |
Строки | |
BOOL CDC::DrawState ( CPoint pt, CSize size, LPCTSTR lpszText, UINT nFlags, BOOL bPrefixText = TRUE, int nTextLen = 0, HBRUSH hBrush = NULL) |
BOOL CDC::DrawState ( CPoint pt, CSize size, LPCTSTR lpszText, UINT nFlags, BOOL bPrefixText = TRUE, int nTextLen = 0, CBrush* pBrush = NULL) |
"Управляемый вывод" изображений | |
BOOL CDC::DrawState ( CPoint pt, CSize size, DRAWSTATEPROC lpDrawProc, LPARAM IData, UINT nFlags, HBRUSH hBrush = NULL) |
BOOL CDC::DrawState ( CPoint pt, CSize size, DPAWSTATEPROC lpDrawProc, LPARAM lData, UINT nFlags, CBrush* pBrush = NULL) |