Все четыре функции в качестве параметров получают новые значения – размеры по осям, а возвращают прежние. Эти значения используются для преобразования логических координат в физические. При этом коэффициентом пересчёта является отношение соответствующих размеров. Настройка размеров для физического окна вывода позволяет управлять направлением осей. Для изменения направления, например, оси у, размер должен быть задан с отрицательным значением.
Структура SIZE определяет размер прямоугольника и объявлена в библиотеке MFC следующим образом:
typedef struct tagSIZE
{
LONG cx; // ширина прямоугольника
LONG cy; // высота прямоугольника
} SIZE, *PSIZE;
В библиотеке MFC определён также класс CSize, который подобен структуре SIZE.
Этот класс происходит от структуры SIZE. Это означает, что вы можете передавать объект типа CSize в качестве параметра функции типа SIZE и наоборот.
По умолчанию начало координат логической области располагается в верхнем левом углу текущего контекста. Изменить положение начала координат отображаемой логической области можно одним из способов: либо переместить начало координат в указанную точку контекста, либо определить точку логической области, которая будет отображаться в верхнем левом углу физической области вывода.
Для настройки начала координат физической области вывода используются функции:
virtual CPoint SetViewportOrg ( int x , int y ) ;
virtual CPoint SetViewportOrg ( POINT point ) ;
В качестве параметров указываются координаты физической области, которые в дальнейшем будут являться началом координат.
Для настройки начала координат логической области вывода используются функции:
CPoint SetWindowOrg ( int x , int у ) ;
CPoint SetWindowOrg ( POINT point ) ;
В качестве параметров указываются координаты логической области, которые в дальнейшем будут соответствовать левому верхнему углу логической области вывода.
Все четыре функции в качестве параметров получают новые значения для установки начала координат и возвращают прежние.
Получить значения для установки начала координат можно с помощью функций:
CPoint GetViewportOrg ( ) const ;
CPoint GetWindowOrg ( ) const ;
Клиентской областью называется вся площадь диалогового окна или элемента управления за исключением его границы. Рисунок может располагаться во всей клиентской области. Поэтому при формировании рисунка необходимо знать её размеры. Для получения размеров клиентской области можно использовать функцию GetClientRect, которая определена в классе CWnd и у всех его потомков соответственно.
Назначение: копирует координаты клиентской области в структуру, на которую указывает параметр.
Синтаксис:
void GetClientRect ( LPRECT lpRect ) const ;
Параметры:
LpRect указатель
на структуру типа RECT
или объект типа CRect.
После вызова функции поля left и top будут равны 0, а поля right и
bottom будут
содержать ширину и высоту окна в пикселях.
В приведённом ниже примере рисуются оси координат, их подписи и прямоугольник. Рисунок формируется с использованием фиксированных координат в логической области постоянного размера. Рисунок выводится в диалоговом окне, размер которого пользователь может изменить произвольным образом. Сформированный рисунок всегда отображается в центре формы. Размер рисунка пропорционален размеру формы.
При написании кода нам не пришлось выполнять пересчёт логических координат в физические координаты по достаточно простым, но громоздким формулам. Функцию масштабирования рисунка берёт на себя класс CDC, а нам достаточно передать ему необходимые параметры с помощью описанных выше функций.
void CMapeModeDlg::OnPicture()
{
const n = 1000 ; // размер логической области
RECT rtWin ; // прямоугольник клиентской области
// создаём совместимый контекст устройства и связываем его с текущим окном
CClientDC dc ( this ) ;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.