Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции -Процедурное программирование в Windows.doc
Скачиваний:
13
Добавлен:
13.09.2019
Размер:
742.91 Кб
Скачать

Сохранение изменений в контексте устройства

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

Если необходимо сохранять изменения, вносимые приложением в контекст устройства, нужно добавить флаг CS_OWNDC к полю типа окна в структуре класса окна:

nWndClass->style = ... | CS_OWNDC;

Теперь все изменения, вносимые приложением в контекст устройства, сохраняются в структуре класса окна до уничтожения вами этого окна. Как правило, изменения атрибутов контекста устройства производят при поступлении приложению сообщения WM_CREATE. Использование флага CS_OWNDC оказывает действие только при получении контекста устройства функциями BeginPaint и GetDC.

GDI предоставляет возможность сохранить контекст устройства перед его изменением, а затем восстановить его. Для этого можно пользоваться функциями SaveDC и RestoreDC. Функция SaveDC используется для сохранения контекста устройства, а функция RestoreDC – для его восстановления. Ниже представлены примеры вызова данных функций:

nSaveDC (hDC); // Сохраняем контекст устройства

... // Изменение контекста устройства

RestoreDC (hDC,nSaveDC); // Восстанавливаем контекст устройства

Система координат в Windows

В 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 можно определить текущий режим работы экрана:

nMapMode = GetMapMode (hDC);