Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
otvety_grafika.docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
3 Мб
Скачать
☆

16. Режимы отображения и настройка их параметров (функции класса cdc mfc). Функция SetMyMode, назначение, параметры и реализация

Режим отображения

Направление оси X

Направление

оси Y

Размер одной логической единицы

MM_TEXT

Вправо

Вниз

1 пиксел

MM_ISOTROPIC

Можно выбирать

Можно выбирать

Произвольный, одинаковый для осей X и Y

MM_ANISOTROPIC

Можно выбирать

Можно выбирать

Произвольный, может быть разный для осей X и Y

Режим MM_TEXT

Режим отображения MM_TEXT устанавливается в контексте отображения по умолчанию. Для этого режима формулы преобразования координат упрощаются:

xViewport = (xWindow - xWinOrg) + xViewOrg

yViewport = (yWindow - yWinOrg) + yViewOrg

Так как по умолчанию xViewOrg=0, yViewOrg=0, xWinOrg=0, yWinOrg=0, то

xViewport = xWindow

yViewport = yWindow

Соответствующая система координат представлена на рис. ниже (начало системы координат расположено точно в левом верхнем углу внутренней области окна, рисунок иллюстрирует только направление координатных осей).

Так как в формуле преобразования не присутствуют переменные xViewExt, yViewExt, xWinExt и yWinExt, в данном режиме преобразования невозможно изменить масштаб осей координат. Поэтому логическая единица длины в режиме отображения MM_TEXT равна физической, т. е. одному пикселу.

Режимы MM_ISOTROPIC и MM_ANISOTROPIC

Режимы отображения MM_ISOTROPIC (изотропный) и MM_ANISOTROPIC (анизотропный) допускают изменение направления осей X и Y, а также изменение масштаба осей координат. В изотропном режиме отображения MM_ISOTROPIC масштаб вдоль осей X и Y всегда одинаковый (т. е. для обоих осей используются одинаковые логические единицы длины). Анизотропный режим MM_ANISOTROPIC предполагает использование разных масштабов для разных осей (хотя можно использовать и одинаковые масштабы).

Для изменения ориентации и масштаба осей предназначены функции SetViewportExtEx и SetWindowExtEx.

Функция SetWindowExtEx устанавливает для формулы преобразования координат значения переменных xWinExt и yWinExt:

BOOL SetViewportExtEx(

HDC hdc, // идентификатор контекста отображения

int nXExtent, // значение для xViewExt

int nYExtent, // значение для yViewExt

LPSIZE lpSize // указатель на структуру SIZE

);

virtual CSize SetViewportExt(int cx, int cy ); // Метод класса CDC MFC

CSize SetViewportExt( SIZE size ); // Метод класса CDC MFC

Функция SetViewportExtEx должна использоваться после функции SetWindowExtEx. Она устанавливает для формулы преобразования координат значения переменных xViewExt и yViewExt:

BOOL SetWindowExtEx(

HDC hdc, // идентификатор контекста отображения

int nXExtent, // значение для xWinExt

int nYExtent, // значение для yWinExt

LPSIZE lpSize // указатель на структуру SIZE

);

virtual CSize SetWindowExt( int cx, int cy ); // Метод класса CDC MFC

CSize SetWindowExt(SIZE size ); // Метод класса CDC MFC

Старые значения переменных, определяющих масштаб преобразования, записываются в структуру SIZE, указатель на которую передается через параметр lpSize.

typedef struct tagSIZE {

LONG cx;

LONG cy;

} SIZE, *PSIZE;

Если они не нужны, можно положить lpSise=NULL

Изотропный режим отображения удобно использовать в тех случаях, когда надо сохранить установленное отношение масштабов осей X и Y при любом изменении размеров окна, в которое выводится изображение.

Анизотропный режим удобен в тех случаях, когда изображение должно занимать всю внутреннюю поверхность окна при любом изменении размеров окна. Соотношение масштабов при этом не сохраняется.

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

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