- •Процедурное программирование
- •Регистрация класса окна
- •Создание окна
- •Командная строка приложения
- •Функции окна приложения
- •Сообщение wm_destroy
- •Вывод в рабочую область окна
- •Контекст устройства и область отрисовки.
- •Сообщение wm_paint
- •Окно-список
- •Заполнение окна-списка
- •Список файлов
- •Изменение цвета органов управления
- •Комбинированный список
- •Меню и назначение клавиш
- •Создание описания меню в файле ресурсов
- •Сообщения меню
- •Диалоговые окна ( диалоги )
- •Определение диалоговых окон в файле ресурсов
- •Диалоговое окно About
- •Функция диалогового окна
- •Взаимодействие с органами управления диалоговых окон
- •Окно сообщений
- •Ввод данных
- •Извлечение данных из диалога
- •Ввод - вывод данных посредством передачи сообщений
- •Функция CreateFile ( )
- •Функция WriteFile ( )
- •Отображение файла в память
- •Функция CreateFileMapping().
- •Функция MapViewOfFile()
- •Работа с отображенным файлом
- •И н т е р ф е й с графических устройств (gdi)
- •Контекст устройства
- •Получение индекса контекста устройства
- •Получение информации из контекста устройства
- •Атрибуты контекста устройства
- •Сохранение изменений в контексте устройства
- •Система координат в Windows
- •Режимы отображения
- •Системы координат
- •Режим mm_text
- •Метрические режимы
- •Режим mm_isotropic
- •Режим mm_anisotropic
- •Вывод графических объектов
- •Двумерные объекты
- •Сегмент и сектор эллипса
- •Библиографический список
Системы координат
Рассмотрим различные системы координат, которые Windows использует для дисплея. Кроме системы, связанной с рабочей областью окна, Windows использует две другие системы для устройств отображения. Во всех системах координат устройств отображения координаты представляются в пикселах. Ось x системы координат направлена вправо, y – вниз.
Когда мы используем весь экран дисплея, мы работаем в т.н. «экранных координатах». При этом начало координат находится в верхнем левом углу экрана. Экранные координаты используются в сообщении WM_MOVE, а также в следующих функциях: CreateWindow, MoveWindow, GetCursorPos, SetCursorPos, GetWindowRect, WindowFromPoint. Если используется функция CreateDC для получения контекста устройства всего экрана дисплея, то при использовании GDI функций логические координаты переводятся Windows в экранные координаты.
Остальные две системы координат связаны не со всем экраном дисплея, а с конкретным окном.
Вторая система координат называется «оконная система координат». Ее начало координат находится в левом верхнем углу рамки окна. Данная система координат описывает все окно, включая меню, полосы просмотра и заголовок. Для использования оконной системы координат надо получать контекст устройства, вызывая функцию GetWindowDC. При этом GDI функции, использующие данный контекст, преобразуют логические координаты в экранные.
И наконец, третья система координат связана с рабочей областью окна. Начало координат данной системы находится в левом верхнем углу рабочей области окна. Когда вы получаете контекст устройства при помощи функций GetDC и BeginPaint, то логические координаты, используемые функциями GDI, транслируются Windows в координаты рабочей области окна.
Первый атрибут контекста устройства называется «режим отображения» и определяет, как логические координаты используемые GDI функциями, преобразуются в физические координаты устройства отображения. При этом система координат устройства отображения может быть экранной, оконной или системой координат рабочей области окна.
Физические координаты устройства отображения имеют в качестве единицы измерения пиксел, а логическая система координат может использовать как единицу измерения и пикселы, и миллиметры, и дюймы.
Режим mm_text
В данном (текстовом) режиме работы оси координат направлены соответственно: x – вправо, а y – вниз. Изначально центр системы координат находится в левом верхнем углу (экрана, окна или рабочей области окна в зависимости от того, как получен контекст устройства):
Рис. Режим отображения MM_TEXT
При помощи функций SetViewOrgEx и SetWindowOrgEx можно сместить начало координат в любую точку экрана.
Например, пусть нам необходимо поместить точку с логическими координатами x=0; y=0 в центр рабочей области окна, то мы можем использовать функцию SetViewportOrg :
SetViewportOrgEx (hDC, // Контекст устройства
xClient/2, // Ширина рабочей области окна в пикселах
yClient/2 // Высота рабочей области окна в пикселах
NULL);
Система координат будет иметь следующий вид:
-Y
-X +X
+Y
Рис. Начало координат смещено в центр экрана
Теперь функции, использующие логические координаты, будут считать началом координат центр экрана.
Можно воспользоваться для изменения начала координат также функцией SetWindowOrgEx();
SetWindowOrgEx (hDC, // Контекст устройства
xClient/2 // Половина ширины рабочей области
// в логических единицах
yClient/2 // Половина высоты рабочей области
// в логических единицах
NULL);
Разница заключается в том, что в функции SetViewportOrgEx параметры задаются в единицах физического устройства, а в SetWindowOrgEx в логических единицах.