- •Программирование в среде windows.
- •Графические функции gdi и средства gdi
- •Аппаратная независимость
- •Файл определения модуля.
- •Сообщения.
- •Диалоговые панели
- •Органы управления
- •Контекст.
- •Цвет фона.
- •Режим фона.
- •Режим рисования.
- •Атрибуты контекста отображения
- •Начальные координаты кисти.
- •Режим закрашивания многоугольников.
- •Текущая позиция пера.
- •Изображение bitmap.
- •Режим растяжения.
- •Область ограничения.
- •Режим отображения.
- •Начало системы координат для окна.
- •Начало системы физических координат.
- •Шрифты.
- •Физическая система координат.
- •Логическая система координат.
- •Преобразование координат.
- •Режимы отображения.
- •Режим mm_text.
- •Метрические режимы отображения.
- •Режимы mm_isotropic и mm_anisotropic
- •Рисование геометрических фигур
- •Рисование точки
- •Рисование линий
- •Текущая позиция пера
- •Рисование прямой линии
- •Рисование ломаной линии
Режимы отображения.
Теперь, после того как мы рассказали о физических и логических координатах, а также о преобразованиях координат, займемся подробным описанием каждого режима отображения.
Режим mm_text.
Режим отображения MM_TEXT устанавливается в контексте отображения по умолчанию. Для этого режима формулы преобразования координат упрощаются:
xViewport = (xWindow - xWinOrg) + xViewOrg
yViewport = (yWindow - yWinOrg) + yViewOrg
Соответствующая система координат представлена на рис. (начало системы координат расположено точно в левом верхнем углу внутренней области окна, рисунок иллюстрирует только направление координатных осей).
Рис. Система координат в режиме отображения MM_TEXT
Так как в формуле преобразования не присутствуют переменные xViewExt, yViewExt, xWinExt и yWinExt, в данном режиме преобразования невозможно изменить масштаб осей координат. Поэтому логическая единица длины в режиме отображения MM_TEXT равна физической, т. е. одному пикселю.
Тем не менее, приложение может изменить смещение физической или логической системы координат, изменив, соответственно, значение пар переменных (xViewOrg, yViewOrg) и (xWinOrg,yWinOrg). Для установки смещения можно использовать функции SetViewportOrg и SetWindowOrg.
Функция SetViewportOrg устанавливает смещение физической системы координат:
DWORD WINAPI SetViewportOrg(
HDC hdc, // контекст отображения
int nXOrigin, // новое значение для xViewOrg
int nYOrigin); // новое значение для yViewOrg
Для контекста отображения hdc эта функция устанавливает новое расположение начала физической системы координат. Младшее и старшее слово возвращаемого значения содержат, соответственно, предыдущие x- и y-координаты начала физической системы координат.
С помощью функции SetWindowOrg вы можете установить начало логической системы координат:
DWORD WINAPI SetWindowOrg(
HDC hdc, // контекст отображения
int nXOrigin, // новое значение для xWinOrg
int nYOrigin); // новое значение для yWinOrg
По своему смыслу параметры nXOrigin и nYOrigin являются логическими x- и y-координатами верхнего угла окна, используемого для отображения (так как в формуле они используются со знаком минус).
Как правило, приложения изменяют либо начало физических координат, вызывая функцию SetViewportOrg, либо начало логических координат, вызывая функцию SetWindowOrg, хотя, в принципе, вы можете изменить и то, и другое. В программном интерфейсе Windows есть варианты описанных выше двух функций, которые называются SetViewportOrgEx и SetWindowOrgEx. Они отличаются более удобным способом передачи старых координат начала соответствующей системы координат:
BOOL WINAPI SetViewportOrgEx(
HDC hdc, // контекст отображения
int nXOrigin, // новое значение для xWinOrg
int nYOrigin, // новое значение для yWinOrg
POINT FAR* lppt); // указатель на структуру POINT
BOOL WINAPI SetWindowOrgEx(
HDC hdc, // контекст отображения
int nXOrigin, // новое значение для xWinOrg
int nYOrigin, // новое значение для yWinOrg
POINT FAR* lppt); // указатель на структуру POINT
В структуру, адрес которой передается через параметр lppt, записываются старые координаты начала системы координат. Обе функции возвращают TRUE в случае успеха и FALSE при возникновении ошибки.
В любой момент времени вы можете определить расположение начала физических или логических координат, если воспользуетесь функциями GetViewportOrg и GetWindowOrg (или их более новыми аналогами - GetViewportOrgEx и GetWindowOrgEx).
Функция GetViewportOrg возвращает x- и y - координаты начала физической системы координат для контекста отображения hdc:
DWORD WINAPI GetViewportOrg(HDC hdc);
Младшее и старшее слово возвращаемого значения содержат, соответственно, предыдущие x- и y-координаты начала физической системы координат.
Функция GetWindowOrg возвращает x- и y - координаты начала логической системы координат:
DWORD WINAPI GetWindowOrg(HDC hdc);
Функции GetViewportOrgEx и GetWindowExtEx записывают координаты начала координат в структуру, адрес которой передается через параметры lppt и lpSize:
BOOL WINAPI GetViewportOrgEx(HDC hdc, POINT FAR* lppt);
BOOL WINAPI GetWindowExtEx(HDC hdc, SIZE FAR* lpSize);
Структура SIZE описана в файле windows.h следующим образом:
typedef struct tagSIZE
{
int cx;
int cy;
} SIZE;
Определены также разнообразные указатели на структуру SIZE:
typedef SIZE* PSIZE;
typedef SIZE NEAR* NPSIZE;
typedef SIZE FAR* LPSIZE;
