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

📄 vecdrawdoc.cpp

📁 这是一个VC++写的串口通信程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// VecDrawDoc.cpp : implementation of the CVecDrawDoc class
//

#include "stdafx.h"
#include "math.h"
#include "VecDraw.h"

#include "VecDrawDoc.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CVecDrawDoc
IMPLEMENT_DYNCREATE(CVecDrawDoc, CDocument)

BEGIN_MESSAGE_MAP(CVecDrawDoc, CDocument)
	//{{AFX_MSG_MAP(CVecDrawDoc)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

double Distance(CPoint p1,CPoint p2)
{
	return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
};
void DrawChoose(CDC *pDC,CPoint p1,CPoint p2,COLORREF color)
{
	int dd=5;
	CPen pen(0,0,color);
	CPen  *pOldPen=pDC->SelectObject(&pen);
//		pDC->SetROP2(R2_NOT);
		pDC->Rectangle(p1.x-dd,p1.y-dd,p1.x+dd,p1.y+dd);
		pDC->Rectangle(p2.x-dd,p1.y-dd,p2.x+dd,p1.y+dd);
		pDC->Rectangle((p1.x+p2.x)/2-dd,p1.y-dd,(p1.x+p2.x)/2+dd,p1.y+dd);
		pDC->Rectangle(p1.x-dd,p2.y-dd,p1.x+dd,p2.y+dd);
		pDC->Rectangle(p2.x-dd,p2.y-dd,p2.x+dd,p2.y+dd);
		pDC->Rectangle((p1.x+p2.x)/2-dd,p2.y-dd,(p1.x+p2.x)/2+dd,p2.y+dd);
		pDC->Rectangle(p1.x-dd,(p1.y+p2.y)/2-dd,p1.x+dd,(p1.y+p2.y)/2+dd);
		pDC->Rectangle(p2.x-dd,(p1.y+p2.y)/2-dd,p2.x+dd,(p1.y+p2.y)/2+dd);
	pDC->SelectObject(&pOldPen);
}
/////////////////////////////////////////////////////////////////////////////
//draw.cpp

IMPLEMENT_SERIAL(CDraw,CObject,1)
CDraw::CDraw(COLORREF ColorPen,int ColorBrush,int LineWide,int LineType,int Layer,int Delete,int ID_Only)
{
	m_ColorPen=ColorPen;
	m_ColorBrush=ColorBrush;
	m_LineWide=LineWide;
	m_LineType=LineType;
	m_Layer=Layer;
	b_Delete=Delete;
	m_ID_Only=ID_Only;
	b_Select=0;
}
void CDraw::Serialize(CArchive &ar)
{
/*
	if(ar.IsStoring())
		ar<<m_ColorPen<<m_ColorBrush<<m_LineWide<<m_LineType<<m_Layer<<b_Delete<<m_ID_Only;
	else
		ar >>m_ColorPen>>m_ColorBrush>>m_LineWide>>m_LineType>>m_Layer>>b_Delete>>m_ID_Only;
*/
	if(ar.IsStoring())
		ar<<b_Select;
	else
		ar>>b_Select;

}
bool CDraw::SelectObject(CPoint pnt)
{
	return 1;
}	
void CDraw::Draw(CDC *pDC,COLORREF color)
{
}
void CDraw::CurDraw(CDC *pDC,COLORREF color)
{
}
double CDraw::IsPoint(CPoint pnt)
{
	return 0;
}
COLORREF CDraw::GetColor()
{
	return m_ColorPen;
}	
void CDraw::SetColor(COLORREF color)
{
	m_ColorPen=color;
}
void CDraw::Offset(int x1,int y1)
{

}
/////////////////////////////////////////////////////////////////////////////
IMPLEMENT_SERIAL(CSave,CObject,1)
CSave::CSave(int vT,int vI)
{
	VectorType=vT;
	Index=vI;
}
int CSave::GetType(){return VectorType;};
int CSave::GetIndex(){return Index;};

void CSave::Serialize(CArchive &ar)
{
	if(ar.IsStoring())
		ar<<VectorType<<Index;
	else
		ar>>VectorType>>Index;
}
/////////////////////////////////////////////////////////////////////////////
//line.cpp
IMPLEMENT_SERIAL(CLine,CObject,1)
CLine::CLine(CPoint p1,CPoint p2)
{
	m_FirstPoint=p1;
	m_SecondPoint=p2;
	m_ColorPen=RGB(0,0,255);
}

CLine::CLine(CPoint p1,CPoint p2,COLORREF color)
{
	m_FirstPoint=p1;
	m_SecondPoint=p2;
	m_ColorPen=color;
}
CLine::CLine(COLORREF ColorPen,int ColorBrush,int LineWide,int LineType,int Layer,int Delete,int ID_Only,CPoint FirstPoint,CPoint SecondPoint)
{
	CDraw(ColorPen,ColorBrush,LineWide,LineType,Layer,Delete,ID_Only);
	m_FirstPoint=FirstPoint;
	m_SecondPoint=SecondPoint;
}
void CLine::Serialize(CArchive &ar)
{
	CDraw::Serialize(ar);
	if(ar.IsStoring())
		ar<<m_FirstPoint<<m_SecondPoint;
	else
		ar>>m_FirstPoint>>m_SecondPoint;
}
bool CLine::SelectObject(CPoint pnt)
{
	if(IsPoint(pnt)<5)
		return 1;
	return 0;
}	
void CLine::Draw(CDC *pDC,COLORREF color)
{
	m_LineType=0;m_LineWide=0;
	CPen pen(m_LineType,m_LineWide,color);
	CPen  *pOldPen=pDC->SelectObject(&pen);
	//pDC->SetBkColor(RGB(0,100,0));
	pDC->MoveTo(m_FirstPoint);
	pDC->LineTo(m_SecondPoint);
	pDC->SelectObject(&pOldPen);
}
void CLine::CurDraw(CDC *pDC,COLORREF color)
{
//	m_ColorPen=color;
	
	if(b_Select==1)
	{
		Draw(pDC,color);
		CPen pen(0,0,color);
		CPen  *pOldPen=pDC->SelectObject(&pen);
		pDC->Rectangle(m_FirstPoint.x-5,m_FirstPoint.y-5,m_FirstPoint.x+5,m_FirstPoint.y+5);
		pDC->Rectangle(m_SecondPoint.x-5,m_SecondPoint.y-5,m_SecondPoint.x+5,m_SecondPoint.y+5);
		pDC->SelectObject(&pOldPen);
	}
	else
	{
		CPen pen(0,0,NULL_PEN);
		CPen  *pOldPen=pDC->SelectObject(&pen);
		CBrush *pOldBrush=(CBrush *)pDC->SelectStockObject(NULL_BRUSH);
//		pDC->SetROP2(R2_NOT);
		pDC->FillRect(CRect(m_FirstPoint.x-5,m_FirstPoint.y-5,m_FirstPoint.x+5,m_FirstPoint.y+5),(CBrush *)pDC->SelectStockObject(NULL_BRUSH));
		pDC->FillRect(CRect(m_SecondPoint.x-5,m_SecondPoint.y-5,m_SecondPoint.x+5,m_SecondPoint.y+5),(CBrush *)pDC->SelectStockObject(NULL_BRUSH));
		pDC->SelectObject(&pOldBrush);
		pDC->SelectObject(&pOldPen);
		Draw(pDC,m_ColorPen);
	}
		//Draw(pDC);
}
double CLine::IsPoint(CPoint pnt)
{
	double fw,aa,bb,cc,ss;
	if(((pnt.x>m_FirstPoint.x)&&(pnt.x>m_SecondPoint.x))||((pnt.x<m_FirstPoint.x)&&(pnt.x<m_SecondPoint.x)))
		return 100;
	if(((pnt.y>m_FirstPoint.y)&&(pnt.y>m_SecondPoint.y))||((pnt.y<m_FirstPoint.y)&&(pnt.y<m_SecondPoint.y)))
		return 100;
	aa=0;
	aa=Distance(pnt,m_FirstPoint);
	if (aa==0) return 0;
	bb=0;
	bb=Distance(pnt,m_SecondPoint);
	if (bb==0) return 0;
	cc=0;
	cc=Distance(m_FirstPoint,m_SecondPoint);
	ss=(aa+bb+cc)*(aa+bb-cc)*(bb+cc-aa)*(aa+cc-bb);
	if (ss==0) return 0;
	ss=sqrt(ss);
	fw=0;
	fw=ss/cc;
	return fw;
}
void CLine::Offset(int x1,int y1)
{
	m_FirstPoint.x+=x1;
	m_FirstPoint.y+=y1;
	m_SecondPoint.x+=x1;
	m_SecondPoint.y+=y1;
}
/////////////////////////////////////////////////////////////////////////////
//Rect.cpp

IMPLEMENT_SERIAL( CRectAngle,CObject,1)
CRectAngle::CRectAngle(CPoint p1,CPoint p2)
{
	m_FirstPoint=p1;
	m_SecondPoint=p2;
	m_ColorPen=RGB(0,0,255);
}

CRectAngle::CRectAngle(CPoint p1,CPoint p2,COLORREF color)
{
	m_FirstPoint=p1;
	m_SecondPoint=p2;
	m_ColorPen=color;
}
CRectAngle::CRectAngle(COLORREF ColorPen,int ColorBrush,int LineWide,int LineType,int Layer,int Delete,int ID_Only,CPoint FirstPoint,CPoint SecondPoint)
{
	CDraw(ColorPen,ColorBrush,LineWide,LineType,Layer,Delete,ID_Only);
	m_FirstPoint=FirstPoint;
	m_SecondPoint=SecondPoint;
}
void CRectAngle::Serialize(CArchive &ar)
{
	CDraw::Serialize(ar);
	if(ar.IsStoring())
		ar<<m_FirstPoint<<m_SecondPoint;
	else
		ar>>m_FirstPoint>>m_SecondPoint;
}
bool CRectAngle::SelectObject(CPoint pnt)
{
	if(IsPoint(pnt)<5)
		return true;
	return false;
}	
void CRectAngle::Draw(CDC *pDC,COLORREF color)
{
	m_LineType=0;m_LineWide=0;
	CPen pen(m_LineType,m_LineWide,color);
	CPen  *pOldPen=pDC->SelectObject(&pen);
//	CBrush *pOldBrush=(CBrush *)pDC->SelectStockObject(NULL_BRUSH);
	//pDC->SetBkColor(RGB(0,100,0));
	pDC->Rectangle(m_FirstPoint.x,m_FirstPoint.y,m_SecondPoint.x,m_SecondPoint.y);
	pDC->SelectObject(&pOldPen);
//	pDC->SelectObject(&pOldBrush);
}
void CRectAngle::CurDraw(CDC *pDC,COLORREF color)
{
//	m_ColorPen=color;
//	Draw(pDC);
	if(b_Select==1)
	{
		Draw(pDC,color);
		DrawChoose(pDC,m_FirstPoint,m_SecondPoint,color);
	}
	else
		Draw(pDC,m_ColorPen);
}
double CRectAngle::IsPoint(CPoint pnt)
{
	double fw,aa;
	if(((pnt.x>m_FirstPoint.x)&&(pnt.x>m_SecondPoint.x))||((pnt.x<m_FirstPoint.x)&&(pnt.x<m_SecondPoint.x)))
		return 100;
	if(((pnt.y>m_FirstPoint.y)&&(pnt.y>m_SecondPoint.y))||((pnt.y<m_FirstPoint.y)&&(pnt.y<m_SecondPoint.y)))
		return 100;
	if(((pnt.x>m_FirstPoint.x)&&(pnt.x<m_SecondPoint.x))&&((pnt.y>m_FirstPoint.y)&&(pnt.y<m_SecondPoint.y)))
		return 0;	
	if(((pnt.x<m_FirstPoint.x)&&(pnt.x>m_SecondPoint.x))&&((pnt.y<m_FirstPoint.y)&&(pnt.y>m_SecondPoint.y)))
		return 0;	

	fw=0;
	aa=0;
	aa=abs(pnt.x-m_FirstPoint.x);
    fw=aa;
	aa=abs(pnt.y-m_FirstPoint.y);
	if(aa<fw)fw=aa;
	aa=abs(pnt.x-m_SecondPoint.x);
    if(aa<fw)fw=aa;
	aa=abs(pnt.y-m_SecondPoint.y);
	if(aa<fw)fw=aa;
	return fw;
}
void CRectAngle::Offset(int x1,int y1)
{
	m_FirstPoint.x+=x1;
	m_FirstPoint.y+=y1;
	m_SecondPoint.x+=x1;
	m_SecondPoint.y+=y1;
}
/////////////////////////////////////////////////////////////////////////////
//Circle.cpp

IMPLEMENT_SERIAL( CCircle,CObject,1)
CCircle::CCircle(CPoint CentrePoint,int R)
{
	m_CentrePoint=CentrePoint;
	m_Radius=R;
	m_ColorPen=RGB(0,0,255);
}

CCircle::CCircle(CPoint CentrePoint,int R,COLORREF color)
{
	m_CentrePoint=CentrePoint;
	m_Radius=R;
	m_ColorPen=color;
}

CCircle::CCircle(CPoint CentrePoint,CPoint Arc,COLORREF color)
{
	m_CentrePoint=CentrePoint;
	m_Radius=Distance(m_CentrePoint,Arc);
	m_ColorPen=color;
}

CCircle::CCircle(COLORREF ColorPen,int ColorBrush,int LineWide,int LineType,int Layer,int Delete,int ID_Only,CPoint CentrePoint,int R)
{
	CDraw(ColorPen,ColorBrush,LineWide,LineType,Layer,Delete,ID_Only);
	m_CentrePoint=CentrePoint;
	m_Radius=R;
}
void CCircle::Serialize(CArchive &ar)
{
	CDraw::Serialize(ar);
	if(ar.IsStoring())
		ar<<m_CentrePoint<<m_Radius;
	else
		ar>>m_CentrePoint>>m_Radius;
}
bool CCircle::SelectObject(CPoint pnt)
{
	if(IsPoint(pnt)<5)
		return true;
	return false;
}	
void CCircle::Draw(CDC *pDC,COLORREF color)
{
	int x1,y1,x2,y2,R;
	R=(int)m_Radius;
	x1=0;y1=0;x2=0;y2=0;
	x1=m_CentrePoint.x-R;
	y1=m_CentrePoint.y-R;
	x2=m_CentrePoint.x+R;
	y2=m_CentrePoint.y+R;

	m_LineType=0;m_LineWide=0;
	CPen pen(m_LineType,m_LineWide,color);
	CPen  *pOldPen=pDC->SelectObject(&pen);
//	CBrush *pOldBrush=(CBrush *)pDC->SelectStockObject(NULL_BRUSH);
	//pDC->SetBkColor(RGB(0,100,0));
	pDC->SetBkMode(TRANSPARENT);
	pDC->Ellipse(x1,y1,x2,y2);
	pDC->SelectObject(&pOldPen);
//	pDC->SelectObject(&pOldBrush);
}
void CCircle::CurDraw(CDC *pDC,COLORREF color)
{
	CPoint p1,p2;
	int R=(int)m_Radius;
	p1.x=m_CentrePoint.x-R;
	p1.y=m_CentrePoint.y-R;
	p2.x=m_CentrePoint.x+R;
	p2.y=m_CentrePoint.y+R;

//	m_ColorPen=color;
//	Draw(pDC);
	if(b_Select==1)
	{
		Draw(pDC,color);
		DrawChoose(pDC,p1,p2,color);
	}
	else
		Draw(pDC,m_ColorPen);
}

double CCircle::IsPoint(CPoint pnt)
{
	double fw,aa;
	fw=0;
	aa=0;
	aa=Distance(m_CentrePoint,pnt);
//	if(aa>m_Radius)
//		fw=(aa-m_Radius);
//	else
//		fw=m_Radius-aa;
	fw=aa-m_Radius;
	return fw;
}
void CCircle::Offset(int x1,int y1)
{
	m_CentrePoint.x+=x1;
	m_CentrePoint.y+=y1;
}

/////////////////////////////////////////////////////////////////////////////
//RectFill.cpp

IMPLEMENT_SERIAL( CRectFill,CObject,1)
CRectFill::CRectFill(CPoint p1,CPoint p2)
{
	m_FirstPoint=p1;
	m_SecondPoint=p2;
	m_ColorPen=RGB(0,0,255);
}

CRectFill::CRectFill(CPoint p1,CPoint p2,COLORREF color)
{
	m_FirstPoint=p1;
	m_SecondPoint=p2;
	m_ColorPen=color;
}
CRectFill::CRectFill(COLORREF ColorPen,int ColorBrush,int LineWide,int LineType,int Layer,int Delete,int ID_Only,CPoint FirstPoint,CPoint SecondPoint)
{
	CDraw(ColorPen,ColorBrush,LineWide,LineType,Layer,Delete,ID_Only);
	m_FirstPoint=FirstPoint;
	m_SecondPoint=SecondPoint;
}
void CRectFill::Serialize(CArchive &ar)
{
	CDraw::Serialize(ar);
	if(ar.IsStoring())
		ar<<m_FirstPoint<<m_SecondPoint;
	else
		ar>>m_FirstPoint>>m_SecondPoint;
}

⌨️ 快捷键说明

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