⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 recttool.cpp

📁 参数化车间设备资源绘制程序
💻 CPP
字号:
#include "StdAfx.h"
#include ".\recttool.h"

#include "rectobj.h"
#include "visdrawdoc.h"
#include "visdrawview.h"

static CRectTool lineToolObj(lineTool);
static CRectTool hlineToolObj(hlineTool);
static CRectTool vlineToolObj(vlineTool);
static CRectTool rectToolObj(rectTool);

CRectTool::CRectTool(void)
{
}

CRectTool::CRectTool(DrawShape drawShape)
	: CDrawTool(drawShape)
{
	pObj = NULL;
}

CRectTool::~CRectTool(void)
{
}

void CRectTool::OnLButtonDown(CVisDrawView* pView, UINT nFlags, const CPoint& point)
{	

	
	CPoint local = point;

	double x, y;

	//把设备坐标转化为逻辑坐标
	pView->ClientToDoc(local);

	//把逻辑坐标转化为世界坐标
	pView->ClientToWorld(local,x,y);

	//申请与视图窗口相关的设备描述表
	CDC* dc=pView->GetDC();

    //用用笔的颜色绘图
	dc->SetROP2(R2_NOT);
	
	//选用空画刷
	dc->SelectStockObject(NULL_BRUSH);

	m_LMouseDownStep++;

	switch(m_LMouseDownStep)
	{
	default:
		break;
	case 1:					//第一次按下鼠标

		//创建矩形对象
		pObj = new CRectObj(CRect(local, CSize(0, 0)));

		switch(m_drawShape)
		{
		default:
			break;

		case lineTool:
		case hlineTool:
		case vlineTool:
			
			//图形类型为直线
			pObj->m_nShape = CRectObj::lineshape;           
			break;

		case rectTool:

			//图形类型为矩形
			pObj->m_nShape = CRectObj::rectshape;
			break;
		}

		//把第一次按下的鼠标点设置矩形左上角
		pObj->SetPoint(1,x,y);
		pObj->CalcBounds(pView);	
		pView->GetDocument()->Add(pObj);
		break;

	case 2:					//第二次按下鼠标		

		switch(m_drawShape)
		{
		default:
			break;
		case lineTool:
		
			//删除第一点到前一个鼠标位置点之间的直线
			dc->MoveTo(lastPoint);
			dc->LineTo(prePoint);
			
			//绘制第一个点到鼠标点的直线
			dc->SetROP2(R2_COPYPEN);
			dc->MoveTo(lastPoint);
			dc->LineTo(point);

			//把鼠标点设置为矩形右下角	
			pObj->SetPoint(2,x,y);
		break;

		case hlineTool:

			//删除第一点到前一个鼠标位置点之间的直线
			dc->MoveTo(lastPoint);
			dc->LineTo(prePoint.x,lastPoint.y);
			
			//绘制第一个点到鼠标点的直线
			dc->SetROP2(R2_COPYPEN);
			dc->MoveTo(lastPoint);
			dc->LineTo(point.x,lastPoint.y);

			local.x = point.x;
			local.y = lastPoint.y;

			//把设备坐标转化为逻辑坐标
			pView->ClientToDoc(local);

			//把坐标转化为世界坐标
			pView->ClientToWorld(local,x,y);
			pObj->SetPoint(2,x,y);

			break;
		case vlineTool:

			local.x = lastPoint.x;
			local.y = point.y;

			//把设备坐标转化为逻辑坐标
			pView->ClientToDoc(local);

			//把坐标转化为世界坐标
			pView->ClientToWorld(local,x,y);
			pObj->SetPoint(2,x,y);

			//CDrawTool::c_drawShape=selectTool;
			
			break;

		case rectTool:


			CRect rect;

			//删除以前一个鼠标点为矩形右下角的矩形			
			rect.TopLeft() = lastPoint;
			rect.BottomRight() = prePoint;
			dc->Rectangle(rect);

			//绘制以当前鼠标点为矩形右下角的矩形
			rect.BottomRight() = point;
			dc->Rectangle(rect);

			pObj->SetPoint(2,x,y);
			

		break;
		}	
 
		//刷新视图
	//	pView->Invalidate();

		pObj->CalcBounds(pView);

		pObj =NULL;
		m_LMouseDownStep = 0;
	}
	lastPoint = point;
	prePoint = point;	

	//释放设备描述表
	pView->ReleaseDC(dc);
}

void CRectTool::OnLButtonUp(CVisDrawView* pView, UINT nFlags, const CPoint& point)
{
}

void CRectTool::OnMouseMove(CVisDrawView* pView, UINT nFlags, const CPoint& point)
{
	
	CPoint local;
	local = point;

	//把设备坐标转化为逻辑坐标
	pView->ClientToDoc(local);

	if(!m_LMouseDownStep) return;


	//申请与视图窗口相关的设备描述表
	CDC* dc=pView->GetDC();
	//用屏幕颜色的反色绘图
	dc->SetROP2(R2_NOT);
	dc->SelectStockObject(NULL_BRUSH);

	switch(m_drawShape)
	{
	default:
		break;
	case lineTool:
		
		  //反转绘制前一条直线
			dc->MoveTo(lastPoint);
			dc->LineTo(prePoint);
			//用画笔颜色绘制起点到终点的直线
		//	dc->SetROP2(R2_COPYPEN);
			dc->MoveTo(lastPoint);
			dc->LineTo(point);

		break;

		case hlineTool:

			//删除第一点到前一个鼠标位置点之间的直线
			dc->MoveTo(lastPoint);
			dc->LineTo(prePoint.x,lastPoint.y);
			
			//绘制第一个点到鼠标点的直线
			dc->MoveTo(lastPoint);
			dc->LineTo(point.x,lastPoint.y);
			break;
		case vlineTool:

			//删除第一点到前一个鼠标位置点之间的直线
			dc->MoveTo(lastPoint);
			dc->LineTo(lastPoint.x,prePoint.y);
			
			//绘制第一个点到鼠标点的直线
			dc->MoveTo(lastPoint);
			dc->LineTo(lastPoint.x,point.y);

			break;

	case rectTool:
			
		CRect rect;
		rect.TopLeft() = lastPoint;
		rect.BottomRight() = prePoint;
		dc->Rectangle(rect);			
		rect.BottomRight() = point;
		dc->Rectangle(rect);
		break;
	}		
	pView->ReleaseDC(dc);
	prePoint = point;
}

void CRectTool::OnLButtonDblClk(CVisDrawView* pView, UINT nFlags, const CPoint& point)
{
}

void CRectTool::CreateObj(CVisDrawView* pView, const CPoint& point)
{
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -