MFC利用Picture控件加载图片和绘制饼图

MFC中Picture控件的使用技巧
本文详细介绍了在MFC中如何使用Picture控件加载并显示图片,以及如何利用该控件绘制复杂的饼图。通过具体代码示例,展示了设置图片显示区域、填充颜色及绘制饼图的具体步骤。

MFC利用Picture控件加载图片和绘制饼图
1、MFC利用picture控件加载图片
(显示图片)

CImage image;
image.Load(_T("./res/tt.png"));
CRect re;
GetDlgItem(IDC_FLY_PNG)->GetClientRect(&re);
image.Draw(GetDlgItem(IDC_FLY_PNG)->GetDC()->m_hDC, re.left, re.top, re.Width(), re.Height());

(显示颜色)

        CStatic *pst = (CStatic *)GetDlgItem(IDC_CLOUDE_PNG);//picture控件ID
		CRect rc;
		pst->GetClientRect(&rc);
		pst->GetDC()->FillSolidRect(rc.left,rc.top,rc.Width(),rc.Height(),RGB(240,240,240));

2、MFC利用Picture控件绘制饼图

	CWnd *pcwnd = this->GetDlgItem(IDC_PICTURE);//控件ID
	CClientDC dc(pcwnd);
	CBrush br1(RGB(253,51,67));
	CBrush br2(RGB(3,141,216));

	SetViewportOrgEx(dc, 160, 140, NULL);
	int total = 345;
	int partNum = 190;
	float about = (float)partNum /total;
	int m_Radius = 100;//半径
	CRect pieRect(-m_Radius, -m_Radius, m_Radius, m_Radius);
	
	int angle = about * 360;  //计算占的角度
	POINT start;
	start.x = m_Radius;
	start.y = 0;
	POINT end;
	end.x = int(m_Radius*cos(angle * 3.14 / 180));
	end.y = int(-m_Radius*sin(angle * 3.14 / 180));

	dc.SelectObject(&br1); //上颜色
	dc.Pie(&pieRect,start,end);
	CString str1;
	str1.Format(TEXT("%0.2f%s"), about*100,TEXT("%"));
	start = end;
	int angle1 = ((total - m_itmp)/total) *360;
	end.x = int(m_Radius*cos(angle1 * 3.14 / 180));
	end.y = int(-m_Radius*sin(angle1 * 3.14 / 180));
	dc.SelectObject(&br2);	
	dc.Pie(&pieRect,start,end);

	CRect expRect;
	int m_expW =60,m_expH =30;           //小矩形的大小
	int l = 0, t = 0;
	for (int i = 0; i < 2; i++)
	{
		l = 80 + 50 +30;
		t = -2*80 + m_expH*i +30;
		if (i==0)
		{
			dc.SelectObject(&br1); //上颜色
		}
		else
		{
			dc.SelectObject(&br2); //上颜色
		}
		dc.Rectangle(l,t + 10,l + m_expW,t + m_expH);
		if (i==0)
		{
			dc.TextOut(l + m_expW + 10, t + m_expH / 3,_T("FEN"));
			dc.TextOut(l + m_expW + 50, t + m_expH / 3,str1);
		}
		else
		{
			dc.TextOut(l + m_expW + 10, t + m_expH / 3,_T("QITA"));
		}

	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值