Поделиться через


Режимы сопоставления и переводы

Режимы сопоставления описаны в следующей таблице.

Режим сопоставления Описание
MM_ANISOTROPIC Каждая единица в пространстве страницы сопоставляется с единицей, указанной приложением, в пространстве устройства. Ось может быть равномасштабной (например, круг, нарисованный в мировом пространстве, может показаться эллипсом при изображении на данном устройстве). Ориентация оси также задается приложением.
MM_HIENGLISH Каждая единица в пространстве страницы сопоставляется с 0,001 дюйма в пространстве устройства. Значение x увеличивается слева направо. Значение y увеличивается снизу вверх.
MM_HIMETRIC Каждая единица в пространстве страницы сопоставляется с 0,01 миллиметра в пространстве устройства. Значение x увеличивается слева направо. Значение y увеличивается снизу вверх.
MM_ISOTROPIC Каждая единица в пространстве страницы сопоставляется с единицей, определенной приложением, в пространстве устройства. Оси всегда масштабируются одинаково. Ориентация осей может быть указана приложением.
MM_LOENGLISH Каждая единица в пространстве страницы сопоставляется с 0,01 дюйма в пространстве устройства. Значение x увеличивается слева направо. Значение y увеличивается снизу вверх.
MM_LOMETRIC Каждая единица в пространстве страницы сопоставляется с 0,1 миллиметра в пространстве устройства. Значение x увеличивается слева направо. Значение y увеличивается снизу вверх.
MM_TEXT Каждая единица в пространстве страницы сопоставляется с одним пикселем; то есть масштабирование не выполняется. Если перевод не действует (это значение по умолчанию), пространство страницы в режиме сопоставления MM_TEXT эквивалентно пространству физического устройства. Значение x увеличивается слева направо. Значение y увеличивается сверху вниз.
MM_TWIPS Каждая единица в пространстве страницы сопоставляется с одной двадцатой точкой принтера (1/1440 дюйма). Значение x увеличивается слева направо. Значение y увеличивается снизу вверх.

 

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

Преобразования пространства страницы в пространство устройства состоят из значений, вычисляемых на основе точек, заданных окном и окном просмотра. В этом контексте окно ссылается на логическую систему координат пространства страницы, а окно просмотра — на систему координат устройства пространства устройства. Окно и окно просмотра состоят из источника, горизонтального ("x") и вертикального ("y") экстента. Параметры окна находятся в логических координатах; окно просмотра в координатах устройства (пикселях). Система объединяет источники и экстенты из окна и окна просмотра для создания преобразования. Это означает, что каждое окно и окно просмотра указывают половину факторов, необходимых для определения преобразования, используемого для сопоставления точек в пространстве страницы с пространством устройства. Таким образом, система сопоставляет источник окна с источником окна просмотра, а экстенты окна — с экстентами окна просмотра, как показано на следующем рисунке.

Иллюстрация, показывающая источник окна в пространстве страницы и источник точки просмотра в пространстве устройства

Экстенты окна и окна просмотра устанавливают отношение или коэффициент масштабирования, используемый в преобразованиях пространства страницы к пространству устройства. Для шести предопределенных режимов сопоставления (MM_HIENGLISH, MM_LOENGLISH, MM_HIMETRIC, MM_LOMETRIC, MM_TEXT и MM_TWIPS) экстенты задаются системой при вызове SetMapMode . Их нельзя изменить. Два других режима сопоставления (MM_ISOTROPIC и MM_ANISOTROPIC) требуют указания экстентов. Для этого вызовите SetMapMode , чтобы задать соответствующий режим, а затем вызовите функции SetWindowExtEx и SetViewportExtEx для указания экстентов. В режиме сопоставления MM_ISOTROPIC перед вызовом SetViewportExtEx важно вызвать SetWindowExtEx.

Источники окна и окна просмотра определяют преобразование, используемое в преобразованиях пространства страницы в пространство устройства. Задайте источники окна и окна просмотра с помощью функций SetWindowOrgEx и SetViewportOrgEx . Источники не зависят от экстентов, и приложение может задать их независимо от текущего режима сопоставления. Изменение режима сопоставления не влияет на заданные в данный момент источники (хотя это может повлиять на экстенты). Источники указываются в абсолютных единицах, на которые не влияет текущий режим сопоставления. Чтобы изменить источники, используйте функции OffsetWindowOrgEx и OffsetViewportOrgEx .

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

Dx = ((Lx - WOx) * VEx / WEx) + VOx 

Задействованы следующие переменные.

Dx     x value in device units 
Lx     x value in logical units (also known as page space units) 
WOx     window x origin 
VOx     viewport x origin 
WEx     window x-extent 
VEx     viewport x-extent 

То же уравнение с заменой x y преобразует компонент y точки.

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

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