Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Обучение VC++ / ЛекцииИнтернетС++ / Лекция_лаб_практикум.doc
Скачиваний:
64
Добавлен:
16.02.2016
Размер:
932.35 Кб
Скачать

Пример создания нового gdi объекта

void CMyView::OnDraw (CDC* pDC)

{

// Создание нового пера

CPen newPen (PS_DASHDOT,2,(COLORREF) 0);

//Сохранение указателя на старое перо, и выбор

// в текущем контексте созданного пера.

CPen* oldPen=pDC->SelectObject(&newPen);

//Перемещение курсора в точку (10;10)

pDC->MoveTo(10,10);

//Проводим линию до точки (110;10)

pDC->LineTo(110,10);

//Востанавливаем старое перо

pDC->SelectObject(oldPen);

}

Режимы преобразования координат

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

Все режимы преобразования координат можно разделить на две части:

  1. Режимы преобразования координат с постоянным масштабом

  2. Режимы преобразования координат с переменным масштабом

Режимы преобразования координат с постоянным масштабом

Режим преобразования

Логическая единица

Описание

MM_TEXT

1 пиксель

Установлен по умолчанию. Начало координат – верхний левый угол. Ось х возрастает вправо. Ось у возрастает вниз.

MM_LOENGLISH

0.01 дюйма

Начало координат – верхний левый угол. Ось х возрастает вправо. Ось у убывает вниз.

MM_HIENGLISH

0.001 дюйма

Начало координат – верхний левый угол. Ось х возрастает вправо. Ось у убывает вниз.

MM_LOMRTRIC

0.1 мм

Начало координат – верхний левый угол. Ось х возрастает вправо. Ось у убывает вниз.

MM_HIMETRIC

0.01 мм

Начало координат – верхний левый угол. Ось х возрастает вправо. Ось у убывает вниз.

MM_TWIPS

1/1440 дюйма

Начало координат – верхний левый угол. Ось х возрастает вправо. Ось у убывает вниз.

Режимы преобразования координат с переменным масштабом

Режим преобразования

Логическая единица

Описание

MM_ISOTROPIC

Нет, но коэффициент пропорциональности всегда равен 1:1

Начало координат – верхний левый угол. Ось х возрастает вправо. Ось у убывает вниз.

MM_ANISOTROPIC

Нет

Начало координат – верхний левый угол. Ось х возрастает вправо. Ось у убывает вниз.

Замечание

Режим преобразования координат следует устанавливать в виртуальной функции OnPrepareDC, которая переопределяется при помощи ClassWizard.

Координатные пространства mfc

Для настойки системы координат в MFC используются два понятия:

  1. Физическая область вывода (viewport), координаты и размеры, которой задаются в физических единицах – пикселях. Физические единицы, еще называют координатами устройства.

  2. Логическая область вывода (window), координаты и размеры, которой задаются в логических единицах, определяемых режимом рисования.

Правила работы с логическими и физическими координатами

Считайте, что все параметры функций – членов CDC – это логические координаты

Считайте, что все параметры функций – членов CWnd – это координаты устройства

Проверяя, попадает ли указатель мыши в определенную область, используйте координаты устройства. Задавайте области в координатах устройства. Такие функции, как CRect::PtInRect, лучше всего работают, если используются координаты устройства.

Некоторые функции для работы с координатами устройства

Все ниже представленные функции являются функциями – членами класса “контекст устройства”

Функция

Описание

SetMapMode(<режим преобразования>);

Устанавливает один из вышеперечисленных режимов преобразования

SetVieportOrg(<координаты нового начала>);

Устанавливает новую точку начала координат

SetWindowExt(<размер по горизонтали, размер по вертикали>);

Устанавливает размер области вывода по горизонтали и вертикали в логических единицах.(Для режима с переменным масштабом).

SetVieportExt(<размер по горизонтали, размер по вертикали >);

Устанавливает размер области вывода по горизонтали и вертикали в физических единицах. (Для режима с переменным масштабом).

LPtoDP(<координаты (CRect)>);

Преобразовывает логические координаты в физические

DPtoLP(<координаты (CRect)>)

Преобразовывает физические координаты в логические.