В Windows существует две координатные системы. Логическая система, с которой связаны функции GDI и, физическая система, связанная со всеми остальными функциями.
Физическая координатная система монитора всегда измеряется в пикселах. Ее начало всегда находится в верхнем левом углу экрана или окна и имеет координаты (0,0).
Для различных режимов работы мониторы имеют различное число пикселов на экране. Например, стандартный экран SVGA имеет 800х600или 1024х768 пикселов. Поэтому измерять экран в пиксеклах не удобно. Windows имеет восемь логических координатных систем.
Логические координатные системы измеряют экран не в пикселах, а в дюймах, миллиметрах.
Начало координат этих систем можно перемещать по экрану.
Все системы координат GDI – логические. Логические координаты всегда связаны с GDI- объектами, т.е. с контекстами устройства.
Это означает, что функции, не использующие контекст устройства, возвращают физические координаты, т.е. имеют дело с пикселами.
То же самое соответствует и системе сообщений Windows. Например, сообщения WM_SIZE, WM_MOVE, WM_LBUTONDOWN всегда передают физические координаты, а не логические, т.к. не относятся к GDI.
Практически все функции GDI требуют определения координат или размеров каких-либо графических объектов. Данные координаты задаются в т.н. «логических» единицах. Windows преобразует эти «логические» координаты или размеры в физические координаты данного устройства (пикселы). При этом преобразовании используются первые пять атрибутов контекста устройства, относящиеся к группе атрибутов режима отображения: начальные координаты, направление осей координат и масштаб координат для каждой оси.
Рассмотрим первый атрибут контекста устройства. Он определяет режим работы экрана. В следующей таблице представлены восемь возможных значений этого атрибута.
Флаг
Логические единицы
Направление оси
X
Y
MM_TEXT
пикселы
Вправо
Вниз
MM_LOMETRIC
0.1 мм
Вправо
Вниз
MM_HIMETRIC
0.01 мм
Вправо
Вниз
MM_LOENGLISH
0.01 дюйма
Вправо
Вниз
MM_HIENGLISH
0.001 дюйма
Вправо
Вниз
MM_TWIPS
1/1140 дюйма
Вправо
Вниз
MM_ISOTROPIC
x = y
Можно выбирать
MM_ANISOTROPIC
x!= y
Можно выбирать
Можно установить любой из этих режимов при помощи функции SetMapMode:
SetMapMode (hDC, nMapMode);
Первый параметр функции содержит индекс контекста устройства, а второй – одно из значений, перечисленных в таблице.
При помощи функции GetMapMode можно определить текущий режим работы экрана: