Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Graph.doc
Скачиваний:
19
Добавлен:
14.05.2015
Размер:
238.59 Кб
Скачать

Доступ к объектам рисования

Функции с префиксом 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).

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

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