MFC基础之椭圆、多边形及饼图

本文详细介绍了使用MFC在CGraphView类中实现各种图形绘制的方法,包括矩形、椭圆、圆弧、饼图和弦的绘制过程。通过具体的代码示例,展示了如何响应鼠标点击事件进行绘图,以及在OnPaint函数中利用设备上下文绘制饼图,特别关注了饼图的绘制算法,实现了动态饼图的展示。

void CGraphView::OnLButtonDown(UINT nFlags, CPoint point)

{

// TODO:  在此添加消息处理程序代码和/或调用默认值

CClientDC dc(this);


//dc.Rectangle(10, 10, 200, 100);//画矩形,参数为左上角坐标和右下角坐标


CRect rect(10, 10, 100, 100);

dc.Rectangle(rect);//画矩形

//dc.Ellipse(rect);//矩形内画椭圆


//dc.Arc(10, 10, 200, 100, 0, 0, 80, 200);//画圆弧,椭圆的一部分,(0, 0)是原点 它与椭圆中心连线

//10, 10, 200, 100决定矩形//80是横坐标, 200是纵坐标, (80, 200)余椭圆中心连线

//两条线之间的椭圆部分就是圆弧

//dc.Arc(10, 10, 200, 100, 80, 200, 0, 0);//另一部分圆弧


CPoint p1(300, 10000);

CPoint p2(-500, -500);

dc.Arc(rect, p1, p2);


//画饼形图

dc.Pie(rect, p1, p2);

CView::OnLButtonDown(nFlags, point);


//画弦

dc.Chord(rect, p1, p2);

}

void CGraphView::OnPaint()

{

CPaintDC dc(this); // device context for painting

// TODO:  在此处添加消息处理程序代码

// 不为绘图消息调用 CView::OnPaint()


int nRevenues[4] = { 125, 376, 252, 184 };

CRect rect;

GetClientRect(&rect);//得到客户区大小


dc.SetViewportOrg(rect.Width()/2, rect.Height()/2);//改变原点

int nTotal = 0;

for (int i = 0; i < 4; i++)

nTotal += nRevenues[i];


int x1 = 0;

int y1 = -1000;


int nSum = 0;


for (int i = 0; i < 4; i++)

{

nSum += nRevenues[i];

double rad = ((double)(nSum * 2 * PI / (double)nTotal) + PI);//默认垂直向下为正

int x2 = (int)(sin(rad) * 1000);

int y2 = (int)(cos(rad) * 1000 * 3)/4;

dc.Pie(-200, -150, 200, 150, x1, y1, x2, y2);

x1 = x2;

y1 = y2;

}

}

204343_MGAi_2480857.png

转载于:https://my.oschina.net/u/2480857/blog/646207

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值