- •Процедурное программирование
- •Регистрация класса окна
- •Создание окна
- •Командная строка приложения
- •Функции окна приложения
- •Сообщение wm_destroy
- •Вывод в рабочую область окна
- •Контекст устройства и область отрисовки.
- •Сообщение wm_paint
- •Окно-список
- •Заполнение окна-списка
- •Список файлов
- •Изменение цвета органов управления
- •Комбинированный список
- •Меню и назначение клавиш
- •Создание описания меню в файле ресурсов
- •Сообщения меню
- •Диалоговые окна ( диалоги )
- •Определение диалоговых окон в файле ресурсов
- •Диалоговое окно About
- •Функция диалогового окна
- •Взаимодействие с органами управления диалоговых окон
- •Окно сообщений
- •Ввод данных
- •Извлечение данных из диалога
- •Ввод - вывод данных посредством передачи сообщений
- •Функция CreateFile ( )
- •Функция WriteFile ( )
- •Отображение файла в память
- •Функция CreateFileMapping().
- •Функция MapViewOfFile()
- •Работа с отображенным файлом
- •И н т е р ф е й с графических устройств (gdi)
- •Контекст устройства
- •Получение индекса контекста устройства
- •Получение информации из контекста устройства
- •Атрибуты контекста устройства
- •Сохранение изменений в контексте устройства
- •Система координат в Windows
- •Режимы отображения
- •Системы координат
- •Режим mm_text
- •Метрические режимы
- •Режим mm_isotropic
- •Режим mm_anisotropic
- •Вывод графических объектов
- •Двумерные объекты
- •Сегмент и сектор эллипса
- •Библиографический список
Сохранение изменений в контексте устройства
После получения контекста устройства приложение может изменить любой его атрибут. Однако данные изменения не сохраняются, и когда приложение в следующий раз получит контекст устройства, его атрибуты будут иметь значения, установленные 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);