画太极鱼图

目录

1.实验原理

2.主要代码

3.运行结果


本文仅供学习交流,严禁用于商业用途,如本文涉及侵权请及时联系本人将及时删除

1.实验原理

CDC::Pie

BOOL Pie(int x1 ,int y1 ,int x2,int y2,int x3 ,int y3 ,int x4 ,int y4);
BOOL Pie(LPRECT lpRect,POINT ptStart ,POINT ptEnd);
返回值:如果成功,则返回非零值,否则为0。

参数: 
x1 指定外接矩形左上角的X逻辑坐标。  
y1 指定外接矩形左上角的Y逻辑坐标。  
x2 指定外接矩形右下角的X逻辑坐标。  
y2 指定外接矩形右下角的Y逻辑坐标。  
x3 指定弧起点的X逻辑坐标。  
y3 指定弧起点的Y逻辑坐标。  
x4 指定弧终点的X逻辑坐标。  
y4 指定弧终点的Y逻辑坐标。  
lpRect 指定外接矩形,可以为该参数传递RECT结构或CRect对象。  
ptStart 指定弧起点,可以为该参数传递POINT结构或CPoint对象。  
ptEnd 指定弧终点,可以为该参数传递POINT结构或CPoint对象。 

说明:
画一个饼图。由一段椭圆弧形成,其中心点和两个端点已经用线段连接。
弧中心是由x1,y1,x2,y2(或lpRect)指定的外接矩形的中心。弧的起点和终点由x3,y3,x4,y4(或ptStart和 ptEnd)指定。
弧由选定笔沿逆时针绘制,另外还有两条从端点到中心点的连线。饼图区域由当前画刷填充。
如果x3等于x4且y3等于y4,则结果为一个椭圆。
它只有一条中心点与点(x3,y3)或点(x4,y4)的连线。
该函数绘制的图形延伸到但不包括右边和底部坐标,即图形高度为y2-y1,宽度为x2-x1,外接矩形的宽度和高度都必须大于2单位且小于32,767单位。

2.主要代码

void C太极图View::OnDraw(CDC* pDC)
{
	C太极图Doc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	if (!pDoc)
		return;

	// TODO:  在此处为本机数据添加绘制代码
	CRect rect;
	GetClientRect(&rect); //lpRect 指向一个RECT结构或一个CRect对象,用于接收客户区坐标。left和top成员将被设为0。right和bottom成员将包含了窗口的宽度和高度。 
	pDC->SetMapMode(MM_ANISOTROPIC);//映射模式定义了将逻辑单位转换为设备单位的单位量,并定义了X和Y的方向
	pDC->SetWindowExt(rect.Width(), rect.Height());//说明了GDI如何将逻辑坐标转换为设备坐标
	pDC->SetViewportExt(rect.Width(), -rect.Height());
	pDC->SetViewportOrg(rect.Width() / 2, rect.Height() / 2);//设置设备上下文的视图端口初始位置。
	rect.OffsetRect(-rect.Width() / 2, -rect.Height() / 2);


	CPen whitePen(PS_SOLID, 1, RGB(255, 255, 0));//此处为了将太极图白色部分便于与底图背景区分,白色画笔 白色画刷 用黄颜色替代
	
	CBrush blackBrush(RGB(0, 0, 0));//黑画刷
	CPen blackPen(PS_SOLID, 1, RGB(0, 0, 0));
	CPen* pOldPen = pDC->SelectObject(&blackPen);//用于保存旧画笔
	CBrush* pOldBrush = pDC->SelectObject(&blackBrush);//用于保存旧画刷
	pDC->Pie(-200, 200, 200, -200, 0, -200, 0, 200);//用于画右半圆
	CBrush whiteBrush(RGB(255, 255, 0));//白画刷
	pDC->SelectObject(&whiteBrush);
	pDC->SetArcDirection(AD_CLOCKWISE);用于设置扇形的画线方向
	pDC->SelectObject(&whitePen);
	pDC->Pie(-200, 200, 200, -200, 0, -200, 0, 200);//用于画左半圆
	pDC->Pie(-100, 200, 100, 0, 0, 0, 0, 0);//上方画白圆
	pDC->SelectObject(&blackBrush);
	pDC->SelectObject(&blackPen);
	pDC->Pie(-100, 0, 100, -200, 0, 0, 0, 0);//下方画黑圆
	pDC->Pie(-50, 150, 50, 50, 0, 25, 0, 25);//上方画黑圆
	pDC->SelectObject(&whiteBrush);
	pDC->SelectObject(&whitePen);
	pDC->Pie(-50, -50, 50, -150, 0, -25, 0, -25);//下方画白圆

	pDC->SelectObject(pOldPen);
	pDC->SelectObject(pOldBrush);
	/*上方函数为绘制太极图代码*/

}

3.运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值