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

📄 book.cpp

📁 用c++编写的简单的绘图程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		y3=center.y+(x3-center.x)*sin(angle)+(y3-center.y)*cos(angle);
		x4=center.x+(x4-center.x)*cos(angle)-(y4-center.y)*sin(angle);
		y4=center.y+(x4-center.x)*sin(angle)+(y4-center.y)*cos(angle);
 }
 void CSquare::SizeScal(int mode)
 {
	 double sizeScal;
	switch(mode)
	{
	case IDC_OBJ_SIZE_LARGE:
		sizeScal=1.1;
		break;
	case IDC_OBJ_SIZE_SMALL:
		sizeScal=0.9;
		break;
	}
		x1=center.x+(x1-center.x)*sizeScal;
		y1=center.y+(y1-center.y)*sizeScal;
		x2=center.x+(x2-center.x)*sizeScal;
		y2=center.y+(y2-center.y)*sizeScal;
		x3=center.x+(x3-center.x)*sizeScal;
		y3=center.y+(y3-center.y)*sizeScal;
		x4=center.x+(x4-center.x)*sizeScal;
		y4=center.y+(y4-center.y)*sizeScal;

 }

//CEllipse类实现
void CEllipse::MoveAt(CDC *pDC, long x, long y)
{
	if( !GetIfFill() )
	{//以下设置DC
	COLORREF XorColor = pDC->GetBkColor()^ GetShapeColor();
	CPen pen(PS_SOLID, GetBorbarScal(), XorColor), *oldpen;
	int oldmode = pDC->GetROP2();
	oldpen = pDC->SelectObject(&pen);
	pDC->SetROP2(R2_XORPEN);
	CBrush* oldbrush;
	//CBrush  brush;
	
		oldbrush = (CBrush*)pDC->SelectStockObject(NULL_BRUSH);
	//以下移动矩形
     pDC->Ellipse(x1,y1,x2,y2);

	x2 = x;
	y2 = y;

     pDC->Ellipse(x1,y1,x2,y2);

	//以下恢复DC
	pDC->SetROP2(oldmode);
	pDC->SelectObject(&oldbrush);
	pDC->SelectObject(oldpen);
	pen.DeleteObject();//释放笔资源
	}

     else
	 {//以下设置DC
	COLORREF XorColor = pDC->GetBkColor()^ GetShapeColor();
	CPen pen(PS_SOLID, GetBorbarScal(), XorColor), *oldpen;
	int oldmode = pDC->GetROP2();
	oldpen = pDC->SelectObject(&pen);
	pDC->SetROP2(R2_XORPEN);
	CBrush* oldbrush;
	CBrush  brush(XorColor);

	oldbrush=(CBrush*)pDC->SelectObject(brush);
	//以下移动矩形
     pDC->Ellipse(x1,y1,x2,y2);

	x2 = x;
	y2 = y;
     pDC->Ellipse(x1,y1,x2,y2);

	//以下恢复DC
		pDC->SetROP2(oldmode);
	pDC->SelectObject(&oldbrush);
	pDC->SelectObject(oldpen);
	pen.DeleteObject();//释放笔资源
	 }
}

void CEllipse::Draw(CDC* pDC)
{

	CPen pen(PS_SOLID, GetBorbarScal(), GetShapeColor()), *oldpen;
	oldpen = pDC->SelectObject(&pen);
	CBrush* oldbrush;
	CBrush  brush(GetShapeColor());
	if( GetIfFill() )	
		oldbrush = (CBrush*)pDC->SelectObject(&brush);
	else
		oldbrush=(CBrush*)pDC->SelectStockObject(NULL_BRUSH);
	//以下移动矩形
     pDC->Ellipse(x1,y1,x2,y2);

	//以下恢复DC
	pDC->SelectObject(&oldbrush);
	pDC->SelectObject(oldpen);
	pen.DeleteObject();//释放笔资源
	center.x=0.5*((double)x1+(double)x2);
	center.y=0.5*((double)y1+(double)y2);
}


void CEllipse::Activation(CDC* pDC,COLORREF typeColor) 
{
    //以下设置DC
	CPen pen(PS_SOLID, GetBorbarScal(), typeColor), *oldpen;
	oldpen = pDC->SelectObject(&pen);
	CBrush* oldbrush;
	CBrush  brush(typeColor);
    oldbrush = (CBrush*)pDC->SelectObject(&brush);
	//以下移动直线
    pDC->Ellipse(x1-2,y1-2,x1+2,y1+2);
    pDC->Ellipse(x2-2,y2-2,x2+2,y2+2);

    pDC->Ellipse(x1-2,y2-2,x1+2,y2+2);
    pDC->Ellipse(x2-2,y1-2,x2+2,y1+2);

	//以下恢复DC

	pDC->SelectObject(&oldbrush);
	pDC->SelectObject(oldpen);
	pen.DeleteObject();//释放笔资源
}

void CEllipse::Delete(CDC* pDC,COLORREF bkColor)
{

	CPen pen(PS_SOLID, GetBorbarScal(),bkColor), *oldpen;
	oldpen = pDC->SelectObject(&pen);
	CBrush* oldbrush;
	CBrush  brush(bkColor);

	if( GetIfFill() )	
		oldbrush = (CBrush*)pDC->SelectObject(&brush);
	else
		oldbrush=(CBrush*)pDC->SelectStockObject(NULL_BRUSH);
	//以下移动矩形
     pDC->Ellipse(x1,y1,x2,y2);
	//以下恢复DC
	pDC->SelectObject(&oldbrush);
	pDC->SelectObject(oldpen);
	pen.DeleteObject();//释放笔资源
}

void CEllipse::NewPoint(long x, long y)
{
	x1 = x2 = x;
	y1 = y2 = y;
}
//移动
void CEllipse::MoveShape(int direction)
{
	switch(direction)
	{
	case DIR_EAST:
			x1+=MOVE_SPEED;
			x2+=MOVE_SPEED;
			center.x+=MOVE_SPEED;
			break;
	case DIR_WEST:
			x1-=MOVE_SPEED;
			x2-=MOVE_SPEED;
			center.x-=MOVE_SPEED;
			break;
	case DIR_SOUTH:
			y1+=MOVE_SPEED;
			y2+=MOVE_SPEED;
			center.y+=MOVE_SPEED;
			break;
	case DIR_NORTH:
			y1-=MOVE_SPEED;
			y2-=MOVE_SPEED;
			center.y-=MOVE_SPEED;
			break;
	}
}
 void CEllipse::Circumrotate(int cock_drt)
 {
   return;

 }
 void CEllipse::SizeScal(int mode)
 {
	 double sizeScal;
	switch(mode)
	{
	case IDC_OBJ_SIZE_LARGE:
		sizeScal=1.1;
		break;
	case IDC_OBJ_SIZE_SMALL:
		sizeScal=0.9;
		break;
	}
		x1=center.x+(x1-center.x)*sizeScal;
		y1=center.y+(y1-center.y)*sizeScal;
		x2=center.x+(x2-center.x)*sizeScal;
		y2=center.y+(y2-center.y)*sizeScal;

 }

//CCircle类实现

void CCircle::MoveAt(CDC *pDC, long x, long y)
{
	if( !GetIfFill() )
	{//以下设置DC
	COLORREF XorColor = pDC->GetBkColor()^ GetShapeColor();
	CPen pen(PS_SOLID, GetBorbarScal(), XorColor), *oldpen;
	int oldmode = pDC->GetROP2();
	oldpen = pDC->SelectObject(&pen);
	pDC->SetROP2(R2_XORPEN);
	CBrush* oldbrush;
	//CBrush  brush;
	
		oldbrush = (CBrush*)pDC->SelectStockObject(NULL_BRUSH);
	//以下移动矩形
     pDC->Ellipse(x1,y1,x2,y2);

		long min = min(abs(x - x1), abs(y - y1));
		if( x < x1 )
			x2 = x1 - min;
		else
			x2 = x1 + min;
		if( y < y1 )
			y2 = y1 - min;
		else
			y2 = y1 + min;

     pDC->Ellipse(x1,y1,x2,y2);

	//以下恢复DC
	pDC->SetROP2(oldmode);
	pDC->SelectObject(&oldbrush);
	pDC->SelectObject(oldpen);
	pen.DeleteObject();//释放笔资源
	}

     else
	 {//以下设置DC
	COLORREF XorColor = pDC->GetBkColor()^ GetShapeColor();
	CPen pen(PS_SOLID, GetBorbarScal(), XorColor), *oldpen;
	int oldmode = pDC->GetROP2();
	oldpen = pDC->SelectObject(&pen);
	pDC->SetROP2(R2_XORPEN);
	CBrush* oldbrush;
	CBrush  brush(XorColor);

	oldbrush=(CBrush*)pDC->SelectObject(brush);
	//以下移动矩形
     pDC->Ellipse(x1,y1,x2,y2);
		long min = min(abs(x - x1), abs(y - y1));
		if( x < x1 )
			x2 = x1 - min;
		else
			x2 = x1 + min;
		if( y < y1 )
			y2 = y1 - min;
		else
			y2 = y1 + min;
     pDC->Ellipse(x1,y1,x2,y2);

	//以下恢复DC
		pDC->SetROP2(oldmode);
	pDC->SelectObject(&oldbrush);
	pDC->SelectObject(oldpen);
	pen.DeleteObject();//释放笔资源
	 }
}

void CCircle::Draw(CDC* pDC)
{

	CPen pen(PS_SOLID, GetBorbarScal(), GetShapeColor()), *oldpen;
	oldpen = pDC->SelectObject(&pen);
	CBrush* oldbrush;
	CBrush  brush(GetShapeColor());

	if( GetIfFill() )	
		oldbrush = (CBrush*)pDC->SelectObject(&brush);
	else
		oldbrush=(CBrush*)pDC->SelectStockObject(NULL_BRUSH);
	//以下移动矩形

     pDC->Ellipse(x1,y1,x2,y2);

	//以下恢复DC
	pDC->SelectObject(&oldbrush);
	pDC->SelectObject(oldpen);
	pen.DeleteObject();//释放笔资源
	center.x=0.5*((double)x1+(double)x2);
	center.y=0.5*((double)y1+(double)y2);
}

void CCircle::Activation(CDC* pDC,COLORREF typeColor) 
{
    //以下设置DC
	CPen pen(PS_SOLID, GetBorbarScal(), typeColor), *oldpen;
	oldpen = pDC->SelectObject(&pen);
	CBrush* oldbrush;
	CBrush  brush(typeColor);
    oldbrush = (CBrush*)pDC->SelectObject(&brush);
	//以下移动直线
    pDC->Ellipse(x1-2,y1-2,x1+2,y1+2);
    pDC->Ellipse(x2-2,y2-2,x2+2,y2+2);

    pDC->Ellipse(x1-2,y2-2,x1+2,y2+2);
    pDC->Ellipse(x2-2,y1-2,x2+2,y1+2);

	//以下恢复DC

	pDC->SelectObject(&oldbrush);
	pDC->SelectObject(oldpen);
	pen.DeleteObject();//释放笔资源
}

void CCircle::Delete(CDC* pDC,COLORREF bkColor)
{

	CPen pen(PS_SOLID, GetBorbarScal(), bkColor), *oldpen;
	oldpen = pDC->SelectObject(&pen);
	CBrush* oldbrush;
	CBrush  brush(bkColor);

	if( GetIfFill() )	
		oldbrush = (CBrush*)pDC->SelectObject(&brush);
	else
		oldbrush=(CBrush*)pDC->SelectStockObject(NULL_BRUSH);
	//以下移动矩形

     pDC->Ellipse(x1,y1,x2,y2);

	//以下恢复DC
	pDC->SelectObject(&oldbrush);
	pDC->SelectObject(oldpen);
	pen.DeleteObject();//释放笔资源
}

void CCircle::NewPoint(long x, long y)
{
	x1 = x2 = x;
	y1 = y2 = y;
}

//移动
void CCircle::MoveShape(int direction)
{
	switch(direction)
	{
	case DIR_EAST:
			x1+=MOVE_SPEED;
			x2+=MOVE_SPEED;
			center.x+=MOVE_SPEED;
			break;
	case DIR_WEST:
			x1-=MOVE_SPEED;
			x2-=MOVE_SPEED;
			center.x-=MOVE_SPEED;
			break;
	case DIR_SOUTH:
			y1+=MOVE_SPEED;
			y2+=MOVE_SPEED;
			center.y+=MOVE_SPEED;
			break;
	case DIR_NORTH:
			y1-=MOVE_SPEED;
			y2-=MOVE_SPEED;
			center.y-=MOVE_SPEED;
			break;
	}
}
 void CCircle::Circumrotate(int cock_drt)
 {
   return;
 }
 void CCircle::SizeScal(int mode)
 {
	 double sizeScal;
	switch(mode)
	{
	case IDC_OBJ_SIZE_LARGE:
		sizeScal=1.1;
		break;
	case IDC_OBJ_SIZE_SMALL:
		sizeScal=0.9;
		break;
	}
		x1=center.x+(x1-center.x)*sizeScal;
		y1=center.y+(y1-center.y)*sizeScal;
		x2=center.x+(x2-center.x)*sizeScal;
		y2=center.y+(y2-center.y)*sizeScal;

 }

/////////////CTriangle类的实现

void CTriangle::Draw(CDC* pDC)
{
	//以下设置DC
	POINT triangle[3]={{x1,y1},{x2,y2},{x3,y3}};
	
	CPen pen(PS_SOLID, GetBorbarScal(), GetShapeColor()), *oldpen;
	oldpen = pDC->SelectObject(&pen);
	CBrush* oldbrush;
	CBrush  brush(GetShapeColor());

	if( GetIfFill() )	
		oldbrush = (CBrush*)pDC->SelectObject(&brush);
	else
		oldbrush=(CBrush*)pDC->SelectStockObject(NULL_BRUSH);
	//以下移动矩形
     pDC->Polygon(triangle,3);

	//以下恢复DC
	pDC->SelectObject(&oldbrush);
	pDC->SelectObject(oldpen);
	pen.DeleteObject();//释放笔资源
	center.x=0.5*((double)x1+(double)x2);
	center.y=0.5*((double)y1+(double)y2);
}
void CTriangle::Delete(CDC* pDC,COLORREF bkColor)
{
	//以下设置DC
	POINT triangle[3]={{x1,y1},{x2,y2},{x3,y3}};
	CPen pen(PS_SOLID, GetBorbarScal(), bkColor), *oldpen;
	oldpen = pDC->SelectObject(&pen);
	CBrush* oldbrush;
	CBrush  brush(bkColor);
	if( GetIfFill() )	
		oldbrush = (CBrush*)pDC->SelectObject(&brush);
	else
		oldbrush=(CBrush*)pDC->SelectStockObject(NULL_BRUSH);
	//以下移动矩形
     pDC->Polygon(triangle,3);

	//以下恢复DC
	pDC->SelectObject(&oldbrush);
	pDC->SelectObject(oldpen);
	pen.DeleteObject();//释放笔资源
}

void CTriangle::MoveAt(CDC *pDC, long x, long y)
{
	if( !GetIfFill() )
	{//以下设置DC
	COLORREF XorColor = pDC->GetBkColor()^ GetShapeColor();
	CPen pen(PS_SOLID, GetBorbarScal(), XorColor), *oldpen;
	int oldmode = pDC->GetROP2();
	oldpen = pDC->SelectObject(&pen);
	pDC->SetROP2(R2_XORPEN);
	CBrush* oldbrush;	
		oldbrush = (CBrush*)pDC->SelectStockObject(NULL_BRUSH);
	//以下移动矩形
		pDC->MoveTo(x1,y1);
		pDC->LineTo(x2,y2);
		pDC->LineTo(x1,y2);
		pDC->LineTo(x1,y1);
	x2 = x;
	y2 = y;

		pDC->MoveTo(x1,y1);
		pDC->LineTo(x2,y2);
		pDC->LineTo(x1,y2);
		pDC->LineTo(x1,y1);

	//以下恢复DC
	pDC->SetROP2(oldmode);
	pDC->SelectObject(&oldbrush);
	pDC->SelectObject(oldpen);
	pen.DeleteObject();//释放笔资源
	x3=x1;
	y3=y2;
	}
     else
	 {//以下设置DC
	COLORREF XorColor = pDC->GetBkColor()^ GetShapeColor();
	CPen pen(PS_SOLID, GetBorbarScal(), XorColor), *oldpen;
	int oldmode = pDC->GetROP2();
	oldpen = pDC->SelectObject(&pen);
	pDC->SetROP2(R2_XORPEN);
	CBrush* oldbrush;
	CBrush  brush(XorColor);
	oldbrush=(CBrush*)pDC->SelectObject(brush);
	//以下移动矩形
    // pDC->Polygon(triangle,3);
		pDC->MoveTo(x1,y1);
		pDC->LineTo(x2,y2);
		pDC->LineTo(x1,y2);
		pDC->LineTo(x1,y1);
	x2 = x;
	y2 = y;
		pDC->MoveTo(x1,y1);
		pDC->LineTo(x2,y2);
		pDC->LineTo(x1,y2);
		pDC->LineTo(x1,y1);
	//以下恢复DC
	pDC->SetROP2(oldmode);
	pDC->SelectObject(&oldbrush);
	pDC->SelectObject(oldpen);
	pen.DeleteObject();//释放笔资源
	x3=x1;
	y3=y2;
	 }
}

void  CTriangle::NewPoint(long x, long y)
{
	 x3=x2=x1 = x;
	 y3=y2=y1 = y;
}
void CTriangle::Activation(CDC* pDC,COLORREF typeColor) 
{
    //以下设置DC
	CPen pen(PS_SOLID, GetBorbarScal(), typeColor), *oldpen;
	oldpen = pDC->SelectObject(&pen);
	CBrush* oldbrush;
	CBrush  brush(typeColor);
    oldbrush = (CBrush*)pDC->SelectObject(&brush);
	//以下移动直线
    pDC->Ellipse(x1-2,y1-2,x1+2,y1+2);
    pDC->Ellipse(x2-2,y2-2,x2+2,y2+2);
    pDC->Ellipse(x3-2,y3-2,x3+2,y3+2);
	//以下恢复DC
	pDC->SelectObject(&oldbrush);
	pDC->SelectObject(oldpen);
	pen.DeleteObject();//释放笔资源
}
//移动
void CTriangle::MoveShape(int direction)
{
	switch(direction)
	{
	case DIR_EAST:
			x1+=MOVE_SPEED;
			x2+=MOVE_SPEED;
			x3+=MOVE_SPEED;
			center.x+=MOVE_SPEED;
			break;
	case DIR_WEST:
			x1-=MOVE_SPEED;
			x2-=MOVE_SPEED;
		     x3-=MOVE_SPEED;
			center.x-=MOVE_SPEED;
			break;
	case DIR_SOUTH:
			y1+=MOVE_SPEED;
			y2+=MOVE_SPEED;
			y3+=MOVE_SPEED;
			center.y+=MOVE_SPEED;
			break;
	case DIR_NORTH:
			y1-=MOVE_SPEED;
			y2-=MOVE_SPEED;
			y3-=MOVE_SPEED;
			center.y-=MOVE_SPEED;
			break;
	}
}
void CTriangle::Circumrotate(int cock_drt)
 {
	double angle;
	switch(cock_drt)
	{
	case ID_OBJ_ANTIC:
		angle=ROTATE_ANGLE;
		break;
	case ID_OBJ_DELIC:
        angle=-ROTATE_ANGLE;
		break;
	}
		x1=center.x+(x1-center.x)*cos(angle)-(y1-center.y)*sin(angle);
		y1=center.y+(x1-center.x)*sin(angle)+(y1-center.y)*cos(angle);
		x2=center.x+(x2-center.x)*cos(angle)-(y2-center.y)*sin(angle);
		y2=center.y+(x2-center.x)*sin(angle)+(y2-center.y)*cos(angle);
		x3=center.x+(x3-center.x)*cos(angle)-(y3-center.y)*sin(angle);
		y3=center.y+(x3-center.x)*sin(angle)+(y3-center.y)*cos(angle);
 }
 void CTriangle::SizeScal(int mode)
 {
	 double sizeScal;
	switch(mode)
	{
	case IDC_OBJ_SIZE_LARGE:
		sizeScal=1.1;
		break;
	case IDC_OBJ_SIZE_SMALL:
		sizeScal=0.9;
		break;
	}
		x1=center.x+(x1-center.x)*sizeScal;
		y1=center.y+(y1-center.y)*sizeScal;
		x2=center.x+(x2-center.x)*sizeScal;
		y2=center.y+(y2-center.y)*sizeScal;
		x3=center.x+(x3-center.x)*sizeScal;
		y3=center.y+(y3-center.y)*sizeScal;

 }



⌨️ 快捷键说明

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