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

📄 paintroundrect.cpp

📁 这是书上的代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	}
	else
	{
		rgn.DeleteObject();
		return TRUE;
	}

}

void CPaintRoundrect::GetBoundingRect(double &minx,double &miny,double &maxx,double &maxy)
{
	double xmin,xmax,ymin,ymax;
	xmin=min(m_pointPrimary.x,m_pointEnd.x);
	xmax=max(m_pointPrimary.x,m_pointEnd.x);
	ymin=min(m_pointPrimary.y,m_pointEnd.y);
	ymax=max(m_pointPrimary.y,m_pointEnd.y);
	minx=xmin;
	miny = ymin;
	maxx =xmax;
	maxy =ymax;
}

void CPaintRoundrect::Serialize(CArchive& ar)
{
	CPainted::Serialize(ar);
	if (ar.IsStoring())
	{
		ar << m_pointEnd;
		ar <<m_ellwidth;
		ar << m_ellheight;
		ar <<m_rgbInside;
		ar <<m_bFilled;
	}
	else
	{
		ar >> m_pointEnd;
		ar >>m_ellwidth;
		ar >> m_ellheight;
		ar >>m_rgbInside;
		ar >>m_bFilled;
	}
}


void CPaintRoundrect::onup1(CPnt& point1, CPnt& point2, CPnt& point3,CWnd *pWnd)
{	m_pointPrimary=point1;
	m_pointEnd=point2;
}

CPnt CPaintRoundrect::returnattr1()
{
	return m_pointPrimary;
}
CPnt CPaintRoundrect::returnattr2()
{
	return	m_pointEnd;
}
//得到绘制起点
//pnt1 为传递的鼠标点坐标,m_EllipsePaintMode==1时
//修改pnt1为人工输入的端点坐标
//pnt2为圆角宽高
//返回值无意义
int CPaintRoundrect::GetPathStartnode(CPnt& pnt1, CPnt& pnt2)
{
	if(m_pDoc->m_RoundrectPaintMode==1)//Ellipse的绘制模式
	{
		pnt1=m_pDoc->m_pPaintStartNode;//绘图时给定的起点
	}
	pnt2.x=m_pDoc->m_dPaintWide;
	pnt2.y=m_pDoc->m_dPaintHeight;	
	
	return 1;
}
//得到绘制终点
//返回值无意义
//
BOOL CPaintRoundrect::GetPathEndnode(CPnt& pnt1)
{	
	if(m_pDoc->m_RoundrectPaintMode==1)//Ellipse的绘制模式
	{
		pnt1=m_pDoc->m_pPaintEndNode;//绘图时给定的起点
	}
	 return 1;
}

/*
double CPaintRoundrect::Distance1(double x1, double y1, double x2, double y2)
{
return (double)sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}

void CPaintRoundrect::toChar(char *p_Char)
{
	double x1,y1,x2,y2,Speed,Length,Angle;
	UINT PathId,StartId,StartType,EndId,EndType,HeadDir,Guide,Obstacle;
	x1=m_pointPrimary.x;
	y1=m_pointPrimary.y;
	x2=m_pointEnd.x;
	y2=m_pointEnd.y;

	Speed=m_fPathLimit;//速度限制
	Length=m_flength;//直线长度
	Angle=m_fangle;//直线角度
	PathId=m_uPathId;//路径ID 5
	StartId=m_uStartNodeId;//起点ID 5
	StartType=m_uStartNodeType;//起点类型 2
	EndId=m_uEndNodeId;//终点ID 5
	EndType=m_uEndNodeType;//终点类型 2
	HeadDir=m_uPathHeading;//路径车头方向 2
	Guide=m_uPathGuideType;//导航方式 1
	Obstacle=m_uPathObstacle;//路径障碍物模式 4	
	char p1[126];
	//把格式化数据写到字符串
	sprintf(p1,"%12.4f,%12.4f,%12.4f,%12.4f,%12.4f,%12.4f,%12.4f,%5d,%5d,%2d,%5d,%2d,%2d,%1d,%4d\n",
		x1,y1,x2,y2,Speed,Length,Angle,PathId,StartId,
		StartType,EndId,EndType,HeadDir,Guide,Obstacle);
	p1[125]=0;
	lstrcat(p_Char,p1);//增加在p_Char字符串后
}

char * CPaintRoundrect::toData(char *p_Char)
{
	float x1,y1,x2,y2,Speed,Length,Angle;
	UINT PathId,StartId,StartType,EndId,EndType,HeadDir,Guide,Obstacle;
	char p1[126];
	strncpy(p1,p_Char,125);	//拷贝一个125字节长度的字符串
	p_Char+=125;			//指向成员变量的字符串后的位置
	p1[125]=0;
	//从字符串读格式化数据
	sscanf(p1,"%f,%f,%f,%f,%f,%f,%f,%d,%d,%d,%d,%d,%d,%d,%d\n",
		&x1,&y1,&x2,&y2,&Speed,&Length,&Angle,&PathId,&StartId,
		&StartType,&EndId,&EndType,&HeadDir,&Guide,&Obstacle);
	m_pointPrimary.x=x1;
	m_pointPrimary.y=y1;
	m_pointEnd.x=x2;
	m_pointEnd.y=y2;

	m_fPathLimit=Speed;//速度限制
	m_flength=Length;//直线长度
	m_fangle=Angle;//直线角度
	m_uPathId=PathId;//路径ID
	m_uStartNodeId=StartId;//起点ID
	m_uStartNodeType=StartType;//起点类型
	m_uEndNodeId=EndId;//终点ID
	m_uEndNodeType=EndType;//终点类型
	m_uPathHeading=HeadDir;//路径车头方向
	m_uPathGuideType=Guide;//导航方式
	m_uPathObstacle=Obstacle;//路径障碍物模式
	return p_Char;			//返回指向成员变量的字符串后的位置
}
void CPaintRoundrect::Move(double x_Move,double y_Move)
{
	//移动直线的起点和终点坐标
	m_pointPrimary.x+=x_Move;
	m_pointEnd.x+=x_Move;
	m_pointPrimary.y+=y_Move;
	m_pointEnd.y+=y_Move;
}
void CPaintRoundrect::DrawErase(CDC* pDC)//擦除图形WHITE_BRUSHHOLLOW_BRUSH
{	
	pDC->SetROP2(R2_COPYPEN);
	CPen*	pOldPen;
	CPen	pDrawPen;
	CBrush*	pOldBrush;		
	pOldBrush = (CBrush *) pDC->SelectStockObject(HOLLOW_BRUSH);
	CPoint m_pointPrimary1;
	CPoint m_pointEnd1;
	DPtoVP(m_pointPrimary,m_pointPrimary1);
	DPtoVP(m_pointEnd,m_pointEnd1);//把最终实际坐标变换为用于显示的逻辑坐标
	pDrawPen.CreatePen(PS_SOLID, m_nWidth, RGB(255,255,255));
	pOldPen = pDC->SelectObject(&pDrawPen);	
	pDC->Rectangle(m_pointPrimary1.x-4,m_pointPrimary1.y-4,m_pointPrimary1.x+4,m_pointPrimary1.y+4);
	pDC->Rectangle(m_pointEnd1.x-4,m_pointEnd1.y-4,m_pointEnd1.x+4,m_pointEnd1.y+4);
	pDC->Ellipse(m_pointPrimary1.x-4,m_pointPrimary1.y-4,m_pointPrimary1.x+4,m_pointPrimary1.y+4);
	pDC->Ellipse(m_pointEnd1.x-4,m_pointEnd1.y-4,m_pointEnd1.x+4,m_pointEnd1.y+4);

	pDC->SelectObject(pOldPen);
	pDC->SelectObject(pOldBrush);
}
*/


void CPaintRoundrect::toChar(char *p_Char)
{
	
}

char * CPaintRoundrect::toData(char *p_Char)
{
	
	return p_Char;			//返回指向成员变量的字符串后的位置
}

void CPaintRoundrect::ChangeOrigin(CPnt pnt)//改变坐标原点
{	
	m_pointPrimary.x=m_pointPrimary.x-pnt.x;
	m_pointPrimary.y=m_pointPrimary.y-pnt.y;
	m_pointEnd.x=m_pointEnd.x-pnt.x;
	m_pointEnd.y=m_pointEnd.y-pnt.y;
}


void CPaintRoundrect::IsDblClkBuilding(void *pTemp1, void *pTemp2)
{
	BOOL change=FALSE;
	m_pDoc = (CPaintobjDoc*) pTemp1;
	CRoundrectAttrDlg rectattr;				
	rectattr.m_pDoc =(CPaintobjDoc*) pTemp1;
	rectattr.m_pActive1=this;	
	rectattr.m_dStartx=m_pointPrimary.x;//起点坐标
	rectattr.m_dStarty=m_pointPrimary.y;//起点坐标
	rectattr.m_dEndx=m_pointEnd.x;//终点坐标
	rectattr.m_dEndy=m_pointEnd.y;//终点坐标
	rectattr.m_bFill=m_bFilled;
	rectattr.m_ctlFillColor.m_FillColor=m_rgbInside;
	rectattr.m_dWidth=m_ellwidth;
	rectattr.m_dHeight=m_ellheight;
	if(rectattr.DoModal()==IDOK)
	{
		if(m_pointPrimary.x!=rectattr.m_dStartx||m_pointPrimary.y!=rectattr.m_dStarty
			||m_pointEnd.x!=rectattr.m_dEndx||m_pointEnd.y!=rectattr.m_dEndy
			||m_ellwidth!=rectattr.m_dWidth||m_ellheight!=rectattr.m_dHeight)
		{
			change=TRUE;
			m_ellwidth=rectattr.m_dWidth;
			m_ellheight=rectattr.m_dHeight;
			m_pointPrimary.x=rectattr.m_dStartx;	
			m_pointPrimary.y=rectattr.m_dStarty;	
			m_pointEnd.x=rectattr.m_dEndx;
			m_pointEnd.y=rectattr.m_dEndy;
			Normalize();
		}
		if(rectattr.m_bFill!=m_bFilled)
		{
			change=TRUE;
			m_bFilled=rectattr.m_bFill;			
		}
		if(m_bFilled&&m_rgbInside!=rectattr.m_ctlFillColor.m_FillColor)
		{
			change=TRUE;
			m_rgbInside=rectattr.m_ctlFillColor.m_FillColor;
		}
		if(change) 
		{
			((CPaintobjView*) pTemp2)->Invalidate();
		}
	}
}

void CPaintRoundrect::IsDblClkDevice(void *pTemp1, void *pTemp2)
{
	BOOL change=FALSE;
	m_pDoc = (CPaintobjDoc*) pTemp1;
	CDeviceRoundrectAttrDlg rectattr;				
	rectattr.m_nDeviceId=m_nDeviceId;
	rectattr.m_nSomeStatus=m_nSomeStatus;
	rectattr.m_nStatusNumber=m_nStatusNumber;	
	rectattr.m_dStartx=m_pointPrimary.x;//起点坐标
	rectattr.m_dStarty=m_pointPrimary.y;//起点坐标
	rectattr.m_dEndx=m_pointEnd.x;//终点坐标
	rectattr.m_dEndy=m_pointEnd.y;//终点坐标
	rectattr.m_bFill=m_bFilled;
	rectattr.m_ctlFillColor.m_FillColor=m_rgbInside;
	rectattr.m_dWidth=m_ellwidth;
	rectattr.m_dHeight=m_ellheight;
	if(rectattr.DoModal()==IDOK)
	{
		m_nDeviceId=rectattr.m_nDeviceId;
		m_nSomeStatus=rectattr.m_nSomeStatus;
		m_nStatusNumber=rectattr.m_nStatusNumber;
		if(m_pointPrimary.x!=rectattr.m_dStartx||m_pointPrimary.y!=rectattr.m_dStarty
			||m_pointEnd.x!=rectattr.m_dEndx||m_pointEnd.y!=rectattr.m_dEndy
			||m_ellwidth!=rectattr.m_dWidth||m_ellheight!=rectattr.m_dHeight)
		{
			change=TRUE;
			m_ellwidth=rectattr.m_dWidth;
			m_ellheight=rectattr.m_dHeight;
			m_pointPrimary.x=rectattr.m_dStartx;	
			m_pointPrimary.y=rectattr.m_dStarty;	
			m_pointEnd.x=rectattr.m_dEndx;
			m_pointEnd.y=rectattr.m_dEndy;
			Normalize();
		}
		if(rectattr.m_bFill!=m_bFilled)
		{
			change=TRUE;
			m_bFilled=rectattr.m_bFill;			
		}
		if(m_bFilled&&m_rgbInside!=rectattr.m_ctlFillColor.m_FillColor)
		{
			change=TRUE;
			m_rgbInside=rectattr.m_ctlFillColor.m_FillColor;
		}
		if(change) 
		{
			((CPaintobjView*) pTemp2)->Invalidate();
		}
	}
}

void CPaintRoundrect::Normalize()
{
	double xmin,xmax,ymin,ymax;
	xmin=min(m_pointPrimary.x,m_pointEnd.x);
	xmax=max(m_pointPrimary.x,m_pointEnd.x);
	ymin=min(m_pointPrimary.y,m_pointEnd.y);
	ymax=max(m_pointPrimary.y,m_pointEnd.y);
	m_pointPrimary.x=xmin;
	m_pointPrimary.y=ymax;	
	m_pointEnd.x=xmax;
	m_pointEnd.y=ymin;
}

⌨️ 快捷键说明

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