Контекст устройств. GDI, драйверы и устройства вывода., страница 3

Dx = (Lx - xWO) * xVE/xWE + xVO

Dy = (Ly - yWO) * yVE/yWE + yVO

Lx = (Dx - xVO) * xWE/xVE + xWO

Ly = (Dy - yVO) * yWE/yVE + yWO

Значение этих переменных должно быть очевидно; например, Dx — это горизонтальная координата устройства, a yWE — вертикальный экстент окна.

Хотя и Windows NT, и Windows 95 использует 32-разрядные значения в вызовах функций GDI, только Windows NT использует внутренне 32-разрядное представление. Windows 95 использует только 16-разрядные значения, игнорируя старшие 16 разрядов.

Для облегчения изменения характеристик отображения Windows предлагает несколько вспомогательных функций: OffsetViewPortOrg, OffsetWindowOrg, ScaleViewportExt и ScaleWindowExt.

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

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

Режимы отображения с ограничениями

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

GDI поддерживает несколько режимов отображения; режим отображения без ограничений MM_ANISOTROPIC — только один из них. Ниже приведены другие режимы отображения:

ММ_ТЕХТ. Начало системы логических координат находится в верхнем левом углу, и значения вертикальных координат увеличиваются вниз. Другими словами, ММ_ТЕХТ эквивалентно отсутствию преобразования вообще. Логическая единица соответствует одному пикселу.

MM_LOENGLISH. Начало отсчета находится в левом нижнем углу, и значения вертикальных координат увеличиваются вверх. Логическая единица соответствует 1/100 дюйма (0.01").

MM_HIENGLISH. Начало отсчета находится в левом нижнем углу, значения вертикальных координат увеличиваются вверх. Логическая единица соответствует 1/1000 дюйма (0.001").

MM_LOMETRIC. Начало отсчета находится в левом нижнем углу, и значения вертикальных координат увеличиваются вверх. Логическая единица соответствует 1/10 миллиметра (0.1 мм) или 1/100 сантиметра (0.01 см).

MM_HIMETRIC. Начало отсчета находится в левом нижнем углу, и значения вертикальных координат увеличиваются вверх. Логическая единица соответствует 1/100 миллиметра (0.01 мм) или 1/1000 сантиметра (0.001 см).

MM_TWIPS. Начало отсчета находится в левом нижнем углу, и значения вертикальных координат увеличиваются вверх. Логическая единица соответствует 1/20 точки (1/1440").

MM_ISOTROPIC. Единственным ограничением является то, что значения вертикальной и горизонтальной логической единиц совпадают. Приложение может свободно указать начало отсчета логической и физической системы координат, а также их горизонтальные экстенты. Вертикальные экстенты вычисляются GDI, исходя из горизонтальных.

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

Преобразования мировых координат

Гибкие возможности отображения координат Windows расширяются в Windows NT благодаря понятию преобразования мировых координат (World Coordinate Transformation). Эта возможность позволяет приложениям указывать произвольные линейные преобразования как отображения логического координатного пространства в физическое.

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

Линейные преобразования делятся на следующие категории: трансляция, масштабирование, вращение, сдвиг и отражение.

Трансляция означает добавление констант к горизонтальным и вертикальным координатам объекта.

Масштабирование означает растягивание или сжатие горизонтального и вертикального экстента объекта.