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;
}
}

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

660

被折叠的 条评论
为什么被折叠?



