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

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

Режим сопоставления Описание
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 важно вызывать SetWindowExtEx перед вызовом SetViewportExtEx.

Начало координат окна и области просмотра устанавливают трансформацию, используемую при преобразовании из пространства страницы в пространство устройства. Задайте источники окна и окна просмотра с помощью функций 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 могут использоваться для преобразования из логических точек в точки устройства и из точек устройства в логические точки соответственно.