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