Подавляющее большинство функций, работающих с оконными координатами, определяют координаты относительно начала рабочей области окна, т.е. от левого верхнего угла.

Таким образом, даже при перемещии окна координаты объектов внутри окна остаются неизменными. При этом единицы, в которых измеряются координаты, зависят от режима отображения (mapping mode), установленного для данного окна. Единицы измерения, зависящие от режима отображения, называют логическими единицами координатами.

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

 

Идентификаторы, применяемые для обозначения режимов отображения

Идентификатор Значение Эффект
MM_TEXT 1 Логическая единица равна пикселю, начало координат - левый верхний угол окна, положительное значение x - вправо, положительное значение y - вниз (обычный отсчет)
MM_LOMETRIC 2 Логическая единица равна 0.1 мм, отсчет координат - обычный
MM_HIMETRIC 3 Логическая единица равна 0,01 мм, отсчет координат - обычный
MM_LOENGLISH 4 Логическая единица равна 0,1 дюйма, отсчет координат - обычный
MM_HIENGLISH 5 Логическая единица равна 0,001 дюйма, отсчет координат - обычный
MM_TWIPS 6 Логическая единица равна 1/12 точки на принтере (~1/1440 дюйма - "твип"), отсчет координат - обычный
MM_ISOTROPIC 7 Логические единицы и направление осей определяются программистом с помощью функций SetWindowExtEx() и SetViewportExtEx(), единицы по осям имеют одинаковый размер
MM_ANISOTROPIC 8 Логические единицы и направления осей определяются так же, как и для MM_ISOTROPIC, но размеры единиц по осям различны
MM_MIN   MM_TEXT
MM_MAX   MM_ANISOTROPIC
MM_MAX_FIXEDSCALE   MM_TWIPS

Для установки текущего режима отображения используется функция SetMappingMode(), которая в файле wingdi.h описана следующим образом:

  WINGDIAPI int  WINAPI SetMapMode(HDC, inc)
Первый аргумент этой функции - хэндл контекста устройства, для которого устанавливается данный режим. Второй аргумент определяет задаваемый режим отображения. В том же файле wingdi.h можно найти и идентификаторы, использующиеся для обозначения режимов отображения(см. табл.). Надеюсь, что после того, как была просмотрена таблица, вопросов у читателя не возникло. Теперь ясно, что иногда для решения конкретных задач (например, построения графиков) можно использовать различные режимы отображения. При создании окна по умолчанию устанавливается режим MM_TEXT, т.е. все координаты исчисляются в пикселах.