Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
WinAPI.docx
Скачиваний:
49
Добавлен:
16.12.2018
Размер:
3.43 Mб
Скачать

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

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

Один из атрибутов контекста устройства, который фактически влияет на все, что вы рисуете в рабочей области, это режим отображения (mapping mode). Четыре других атрибута контекста устройства — начало координат окна (window origin), начало координат области вывода (viewport origin), протяженность окна (window extents) и протяженность области вывода (viewport extents) — полностью зависят от значения атрибута режима отображения.

Большинство рисующих функций GDI требуют в качестве параметров координаты или размеры. Например, функция TextOut:

TextOut(hdc, x, y, szBuffer, iLength);

Параметры x и y задают начальную позицию текста. Параметр x — это горизонтальная позиция, а параметр y — вертикальная позиция. Часто запись (x, y) используется для указания этой точки.

В функции TextOut, как фактически во всех функциях GDI, эти значения координат задаются в "логических единицах измерения". Windows должна преобразовать логические единицы в "физические единицы, единицы измерения устройства", т. е. пиксели. Результат этого преобразования определяется режимом отображения, началом координат окна и области вывода, растяжением окна и области вывода. Режим отображения задает также направление осей координат x и y, т. е. определяет, в каком направлении на экране возрастает значение координаты x — влево или вправо и в каком направлении возрастает значение координаты y — вверх или вниз.

В Windows определены восемь режимов отображения. Они приведены в таблице с использованием идентификаторов, определенных в заголовочных файлах Windows:

Вы можете устанавливать режим отображения, используя функцию:

SetMapMode(hdc, iMapMode);

Параметр iMapMode — это один из восьми идентификаторов режима отображения. Определить текущий режим отображения вы можете путем вызова:

iMapMode = GetMapMode(hdc);

По умолчанию установлен режим MM_TEXT. В этом режиме отображения логические единицы эквивалентны физическим единицам, что позволяет нам (или заставляет нас) работать непосредственно в терминах пикселей. В следующем вызове функции TextOut:

TextOut(hdc, 8, 16, szBuffer, iLength);

текст начинается в точке, отстоящей на 8 пикселей слева и на 16 пикселей сверху от границы рабочей области.

Если установлен режим отображения MM_LOENGLISH, то логические единицы — это сотые доли дюйма:

SetMapMode(hdc, MM_LOENGLISH);

Теперь вызов функции TextOut может выглядеть так:

TextOut(hdc, 50, -100, szBuffer, iLength);

Текст начинается на расстоянии 0,5 дюйма от левого края и на расстоянии 1-го дюйма от верхнего края рабочей области. (Почему у координаты y стоит знак минус, станет понятно позже, когда режимы отображения будут рассматриваться более подробно.) Другие режимы отображения позволяют программе задавать координаты вывода в миллиметрах, размерах точки принтера или произвольных единицах.

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

Независимо от режима отображения все координаты, которые вы задаете в функциях Windows, должны быть знаковыми короткими целыми (signed short integer) числами в интервале от —32768 до 32767. Некоторые функции Windows, использующие начальную и конечную точки прямоугольника, также требуют, чтобы ширина и высота прямоугольника были меньше чем 32767.

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