http://tikitak.narod.ru ---- Главная страница сайта
Шаг 20 - Масштабирования графического изображения
Создание проекта
Дополняем Step1. Создаем класс CZoomWindow так-же как и в предыдущем шаге.
Создаем код
ZoomWindow.h
class CZoomWindow
{
public:
CZoomWindow();
virtual ~CZoomWindow();
CSize GetWin();
CSize GetView();
void ZoomIn();
void ZoomOut();
private:
CSize win;
CSize view;
};
ZoomWindows.cpp
#include "afxwin.h"
#include "ZoomWindow.h"
CZoomWindow::CZoomWindow()
{
win=CSize(1,1);
view=CSize(1,1);
}
CZoomWindow::~CZoomWindow()
{
}
void CZoomWindow::ZoomIn() // больше
{
if (win==CSize(1,1)) view+=CSize(1,1);
else win-=CSize(1,1);
}
void CZoomWindow::ZoomOut() // меньше
{
if (view==CSize(1,1)) win+=CSize(1,1);
else view-=CSize(1,1);
}
CSize CZoomWindow::GetWin()
{
return win;
}
CSize CZoomWindow::GetView()
{
return view;
}
Включение описания класса в Step1.cpp
#include "ZoomWindow.h"
Описание класса в классе рамки окна.
class CMainWnd : public CFrameWnd
{
public:
.............
private:
.............
CZoomWindow zoomWin;
.............
};
Меняем реакцию на двойные нажатия мышью
void CMainWnd::OnRButtonDblClk( UINT, CPoint )
{
zoomWin.ZoomOut();
Invalidate(true);
}
void CMainWnd::OnLButtonDblClk( UINT, CPoint)
{
zoomWin.ZoomIn();
Invalidate(true);
}
Меняем OnPaint
void CMainWnd::OnPaint()
{
CMyPaintDC dc(this);
CPen MyPen(PS_DASHDOT,1,RGB(0,255,0));
dc.SetMapMode( MM_ANISOTROPIC );
dc.SetViewportOrg(position.GetPoint());
dc.SetViewportExt(zoomWin.GetView());
dc.SetWindowExt(zoomWin.GetWin());
..............
}
Описание
Масштабирование в данной реализации основано на идеи применения двух функций.
SetViewportExt применяется для определения желаемых единиц, ориентации и масштабирования осей. Если ей передать в параметры (1,1) то не изменится нечего, а вот если (2,2) то графическое изображение увеличится. Соотвественно наращивая эти параметры можно увеличивать изборажение, а уменьшая уменьшать. Но вот есть что, уменьшать можно до 1 , а дальше при переходе к отрицательным значения изборажение опять увеличивается. И выход из этого есть в другой функции.
SetWindowExt устанавливает заданные размеры окна. Так вот увеличивая экран, уменьшается изображение. То-есть параметры можно нарашивать и изображение уменьшится, и наоборот с границей на 1.
view+=CSize(1,1); Так я увеличиваю view на один. Класс CSize имеет перегруженные функции + и -. Для того чтобы не создавать отдельный класс CSize(1,1) мы его создаем в ходе сложения.
Остальное известно из прошлых шагов. Я надеюсь что, известно.
Если Вы знаете другие методы масштабирования - Пишите.
Шпаргалка
SetViewportExt - Увеличивает избражение.
SetWindowExt - Уменьшение изображения.
Предыдущий Шаг | Следующий Шаг | Оглавление By Artem.
Используются технологии uCoz
|