#include "StdAfx.h" #include "MouseToolCopy.h" #include "GlobalFunction.h" #include "GlobalDrawMgr.h" #include "LogMgr.h" #include "CommandCopy.h" #include "DrawSimpleShape.h" #include "CommandMgr.h" CMouseToolCopy::CMouseToolCopy(void) { //标签栏-------------------------start GetFrame()->ResetCaptionBar(); GetFrame()->SetCaptionCmdStr(CMD_TOOL_COPY_BASE_PT); GetFrame()->RefreashCaptionBar(); //标签栏-------------------------end } CMouseToolCopy::~CMouseToolCopy(void) { } void CMouseToolCopy::OperateOver() { //obj 操作 SObjOperatePar par; par.OpType = _OP_MOVE; par.MoveX = m_MoveDisX; par.MoveY = m_MoveDisY; //只操作当前选择的obj m_TmpObjContainer.OperateObj(par,true); m_TmpObjContainer.DelSelObj(); m_TmpObjContainer.AllObjAddToLayer(); //创建撤销指令-------start CCommandCopy *p = new CCommandCopy; gCommandMgr.AddUndoCommand(p,m_TmpObjContainer.GetObjVec()); //创建撤销指令-------end CMouseTool::OperateOver(); m_Status = _STATUS_END; } void CMouseToolCopy::OnLButtonDown(UINT nFlags, CPoint point,CClientDC &dc) { Dbxy pt = gDraw->CPoint2Dbxy(point); //obj 操作 SObjOperatePar par; par.OpType = _OP_MOVE; par.MoveX = m_MoveDisX; par.MoveY = m_MoveDisY; //只操作当前选择的obj m_TmpObjContainer.OperateObj(par,true); //克隆已选择的obj 到临时容器 //先把之前的置为非选择状态 m_TmpObjContainer.NotSelAllObj(); //再导入当前选择的obj gLayer.CloneObj(m_TmpObjContainer,true); if(m_Status==_STATUS_1)//指定基点 { m_BasePoint = pt; //创建模拟操作的对象 CreatOpSimulateObj(); ToNextStatus(); } else { //移动到当前位置 m_MoveDisX = pt.x - m_BasePoint.x; m_MoveDisY = pt.y - m_BasePoint.y; //避免将第一个位置擦除 m_bFirstMove = true; } } void CMouseToolCopy::OnLButtonUp(UINT nFlags, CPoint point,CClientDC &dc) { } void CMouseToolCopy::OnMouseMove(UINT nFlag, CPoint point,CClientDC &dc) { Dbxy OldPt = gDraw->CPoint2Dbxy(m_PreMovePt); Dbxy CurPt = gDraw->CPoint2Dbxy(point); if(m_Status==_STATUS_2) { if(m_bFirstMove==false) { //重绘模拟对象 XorRedrawOpSimulateObj(&dc); } m_bFirstMove = false; if(HasPreMovePt())//擦除之前的线 { XorDrawLine(&dc,gDraw->GetObjectPen(),m_BasePoint,OldPt); } XorDrawLine(&dc,gDraw->GetObjectPen(),m_BasePoint,CurPt);//绘制一条临时线 //计算移动距离 m_MoveDisX = CurPt.x - m_BasePoint.x; m_MoveDisY = CurPt.y - m_BasePoint.y; //obj 操作 SObjOperatePar par; par.OpType = _OP_MOVE; par.MoveX = m_MoveDisX; par.MoveY = m_MoveDisY; //操作模拟对象 OpSimulateObj(par); //重绘模拟对象 XorRedrawOpSimulateObj(&dc); SavePreMovePt(point); } } void CMouseToolCopy::OnEscapeKey() { OperateOver(); } bool CMouseToolCopy::OnSetCmd(CString str) { return false; }