Контекст устройства. Работа с текстом. Диалоговое окно выбора цвета. Настройка режима отображения. Точечный рисунок. Класс CBitmap, страница 10

Все четыре функции в качестве параметров получают новые значения – размеры по осям, а возвращают прежние. Эти значения используются для преобразования логических координат в физические. При этом коэффициентом пересчёта является отношение соответствующих размеров. Настройка размеров для физического окна вывода позволяет управлять направлением осей. Для изменения направления, например, оси у, размер должен быть задан с отрицательным значением.

Размер прямоугольника. Структура SIZE

Структура SIZE определяет размер прямоугольника и объявлена в библиотеке MFC следующим образом:

typedef  struct  tagSIZE

{

         LONG        cx;              // ширина прямоугольника

         LONG        cy;              // высота прямоугольника

} SIZE, *PSIZE;

В библиотеке MFC определён также класс CSize, который подобен структуре SIZE.

Этот класс происходит от структуры SIZE. Это означает, что вы можете передавать объект типа CSize в качестве параметра функции типа SIZE и наоборот.

Настройка начала координат. Функции SetViewportOrg и SetWindowOrg

По умолчанию начало координат логической области располагается в верхнем левом углу текущего контекста. Изменить положение начала координат отображаемой логической области можно одним из способов: либо переместить начало координат в указанную точку контекста, либо определить точку логической области, которая будет отображаться в верхнем левом углу физической области вывода.

Для настройки начала координат физической области вывода используются функции:

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

Клиентской областью называется вся площадь диалогового окна или элемента управления за исключением его границы. Рисунок может располагаться во всей клиентской области. Поэтому при формировании рисунка необходимо знать её размеры. Для получения размеров клиентской области можно использовать функцию 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 ) ;