www.adept7.kiev.ua
| Форум| Гостевая| Ссылки| Программы| Исходные тексты| Наши партнеры.|
   
| Главная| Рассылки| Услуги| Библиотека| Новости| Авторам| Программистам| Студентам|
delphi c++ assembler
  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
 

Rambler's Top100 Rambler's Top100

©  Adept Design Studio

Используются технологии uCoz