Режимы отображения.
Теперь, после того как мы рассказали о физических и логических координатах, а также о преобразованиях координат, займемся подробным описанием каждого режима отображения.
Режим MM_TEXT.
Режим отображения MM_TEXT устанавливается в контексте отображения по умолчанию. Для этого режима формулы преобразования координат упрощаются:
xViewport = (xWindow - xWinOrg) + xViewOrgyViewport = (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;Дата добавления: 2016-07-22; просмотров: 1561;