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). Эта возможность позволяет приложениям указывать произвольные линейные преобразования как отображения логического координатного пространства в физическое.
Для понимания работы преобразования координат необходимо немного углубиться в геометрию координат.
Линейные преобразования делятся на следующие категории: трансляция, масштабирование, вращение, сдвиг и отражение.
Трансляция означает добавление констант к горизонтальным и вертикальным координатам объекта.
Масштабирование означает растягивание или сжатие горизонтального и вертикального экстента объекта.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.