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

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

Рассмотрим различные системы координат, которые 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 в логических единицах.