Контекст устройства. Работа с текстом. Диалоговое окно выбора цвета. Настройка режима отображения. Точечный рисунок. Класс CBitmap, страница 9

         dc.Rectangle ( &rt ) ;                                 // рисуем прямоугольник

Получение атрибутов объекта. Функция GetObject

В некоторых случаях, например, если графический объект содержит много атрибутов, удобно не создавать объект, а получить текущий и изменить некоторые его свойства. Для этой цели в классе CGdiObject определена функция GetObject, синтаксис которой имеет вид:

int GetObject ( int nCount , LPVOID lpObject ) const ;

Функция возвращает количество скопированных байтов или ноль, если произошла ошибка.

Параметры:

lpObject               указатель на буфер, который получает информацию;

nCount                 определяет количество байтов для копирования в буфер lpObject.

Функция заполняет буфер данными, которые определяют указанный объект. Тип буфера определяется видом графического объекта в соответствии со следующим списком:

Тип объекта                      Тип буфера

CPen                                            LOGPEN

CBrush                                        LOGBRUSH

CFont                                 LOGFONT

CBitmap                            BITMAP

CPalette                             WORD

CRgn                                 Не поддерживается

Настройка режима отображения

Все функциями вывода используют координаты заданные в логических единицах. По умолчанию в качестве логических координат используются физические координаты текущего окна. Физические координаты – это расстояние точки от верхнего левого угла окна в пикселях. При этом начало координат (точка x = 0, y = 0 ) располагается в верхнем левом углу, x-координата растёт слева направо, а y-координата – сверху вниз.

Если при создании изображения использовать логические координаты, то такие задачи, как пропорциональное изменение размеров или перемещение изображения можно элементарно решить с помощью изменения единиц измерения или перемещения системы координат, не изменяя написанного кода.

Функции из этой группы устанавливают и настраивают систему координат, которая используется всеми функциями вывода. Кроме единиц по осям x и у, функции этой группы задают направление осей и начало координат.

Выбор единиц измерения. Функция SetMapMode

Назначение: устанавливает направление осей и определяет логические единицы, т.е. единицы измерения для задаваемой системы координат.

virtual int SetMapMode ( int nMapMode ) ;

Возвращаемое значение: предыдущее значение режима преобразования логических координат в физические.

Параметры:

nMapMode          определяет новый режим преобразования логических координат в физические. Может принимать одно из следующих значений:

MM_TEXT                        логическая единица равна одному пикселю, ось у направлена вниз (режим по умолчанию)

MM_TWIPS                      логическая единица равна 1 твипу), ось у направлена вверх (20 твипов = 1 типографскому пункту, 1440 твипов = 1 дюйму

MM_HIENGLISH             логическая единица равна 0.001 дюйма, ось у направлена вверх

MM_HIMETRIC                         логическая единица равна 0.01 миллиметра, ось у направлена вверх

MM_LOENGLISH            логическая единица равна 0.01 дюйма, ось у направлена вверх

MM_LOMETRIC              логическая единица равна 0.1 миллиметра, ось у направлена вверх

MM_ISOTROPIC              режим позволяет настраивать с помощью функций SetWindowExt и SetViewportExt размерность осей и их направления, однако размерность оси х равна размерности оси у

MM_ANISOTROPIC        режим позволяет настраивать с помощью функций SetWindowExt и SetViewportExt размерность осей координат и их направления (отдельно для каждой)

Задание произвольных единиц измерения. Функции SetViewportExt и SetWindowExt

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

virtual CSize SetViewportExt ( int cx , int cy ) ;

virtual CSize SetViewportExt ( SIZE size ) ;

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

virtual CSize SetWindowExt ( int cx , int cy ) ;

virtual CSize SetWindowExt ( SIZE size ) ;