www.pudn.com > VCad3.0.zip > ViewPanCmd.cpp


#include "stdafx.h" 
#include "math.h" 
#include "Entity.h" 
#include "MainFrm.h" 
#include "VCad.h" 
#include "VCadDoc.h" 
#include "VCadView.h" 
#include "Command.h" 
#include "ModifyCmd.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
class CVCadDoc ; 
class CVCadView ; 
 
CViewPanCmd::CViewPanCmd() 
	: m_basePos(0,0), m_desPos(0,0) 
{ 
	m_nStep = 0;// 初始化操作步为 0 
} 
CViewPanCmd::~CViewPanCmd() 
{ 
} 
int	CViewPanCmd::GetType() 
{ 
	return ctPan; 
} 
int	CViewPanCmd::OnLButtonDown(UINT nFlags, const Position& pos)  
{ 
	m_nStep ++ ; 
	switch(m_nStep) 
	{ 
		case 1: 
			// 第一次单击鼠标左键时得到基点位置,并初步设定目标位置 
			m_basePos = m_desPos = pos; 
			::Prompt("请输入移动的目标点") ; 
			break; 
		case 2: 
		{ 
			m_desPos = pos; 
			double dx = m_desPos.x - m_basePos.x ; 
			double dy = m_desPos.y - m_basePos.y ; 
			double x =  g_pView->GetOrgX() -dx; 
			double y =  g_pView->GetOrgY() -dy; 
			g_pView->SetOrgX(x) ; 
			g_pView->SetOrgY(y) ; 
			g_pDoc->UpdateAllViews(NULL) ; 
	 
			m_nStep = 0;  
			break; 
		} 
		default: 
			break; 
	} 
	 
	return 0; 
} 
int	CViewPanCmd::OnMouseMove(UINT nFlags, const Position& pos) 
{ 
 
	switch(m_nStep) 
	{ 
		case 0: 
			::Prompt("请输入移动画面的起始点:") ; 
			break; 
		case 1: 
		{ 
			Position	prePos, curPos; 
			prePos = m_desPos; // 获得上一个目标位置 
			curPos = pos; // 得到当前位置 
			 
			double dx = curPos.x - prePos.x ; 
			double dy = curPos.y - prePos.y ; 
			double x =  g_pView->GetOrgX() - dx; 
			double y =  g_pView->GetOrgY() - dy; 
			g_pView->SetOrgX(x) ; 
			g_pView->SetOrgY(y) ; 
			g_pDoc->UpdateAllViews(NULL) ; 
 
			m_desPos.x = pos.x - dx; // 将目标设置为当前位置 
			m_desPos.y = pos.y - dy; 
 
		} 
		break; 
		default: 
			break; 
	} 
	return 0; 
} 
// 单击鼠标右键取消正在进行的操作 
int	CViewPanCmd::OnRButtonDown(UINT nFlags, const Position& pos)  
{ 
	return 0; 
} 
// 调用Cancel 函数取消本次操作 
int CViewPanCmd::Cancel() 
{ 
 
	return 0; 
}