博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MFC绘制直方图和饼图
阅读量:6856 次
发布时间:2019-06-26

本文共 3316 字,大约阅读时间需要 11 分钟。

转载原文:使用Win32API 编程方法编写一个程序绘制直方图和饼图

 

MFC 工程中的代码

void CChildView::OnPaint() {    CPaintDC dc(this); // device context for painting//  改字体    LOGFONT log;    CFont font;    log.lfHeight=0;    log.lfEscapement=0;    log.lfItalic=0;    log.lfUnderline=0;    log.lfStrikeOut=0;//    dc.SelectObject(&font);     font.CreateFontIndirect(&log);    //画笔    CPen pen(PS_SOLID,1,RGB(0,0,0));             dc.SelectObject(&pen); //    *OldPen = dc.SelectObject(&pen);//旧画笔    //逻辑坐标    SetViewportOrgEx(dc,50,500,NULL);    dc.SetMapMode(MM_LOMETRIC);//0.1毫米       //纵坐标    dc.MoveTo(0,0);    dc.LineTo(0,1000);//高1000    dc.LineTo(-10,980);    dc.MoveTo(0,1000);    dc.LineTo(10,980);  //纵坐标循环    CString str;    int i;    for(i=1;i<10;i++)    {   str.Format("%d",i*10);            dc.TextOut(-30,i*100,str);    }        dc.TextOut(-50,1050,"%");    //横坐标    dc.MoveTo(0,0);   dc.LineTo(850,0);    dc.LineTo(830,10);    dc.MoveTo(850,0);    dc.LineTo(830,-10);    int x1,y1,x2,y2,y3,x3;    float zhuan=0.4,ben=0.3,shuo=0.2,bo=0.1;    int h=1000,r=400;            //画柱子     dc.SelectObject(&font);     //修改字体        CRect r1(100,zhuan*h,200,0);    CBrush br1(RGB(253,51,67));    dc.FillRect(r1,&br1);//矩形,颜色   dc.TextOut(130,-10,"专科");//横坐标的说明文字    CRect r2(300,ben*h,400,0);    CBrush br2(RGB(250,164,51));    dc.FillRect(r2,&br2);    dc.TextOut(330,-10,"本科");    CRect r3(500,shuo*h,600,0);    CBrush br3(RGB(139,197,51));    dc.FillRect(r3,&br3);    dc.TextOut(530,-10,"硕士");    CRect r4(700,bo*h,800,0);    CBrush br4(RGB(3,141,216));    dc.FillRect(r4,&br4);    dc.TextOut(730,-10,"博士");//    dc.SetBkColor(RGB(0,0,0));//    dc.Rectangle(100,zhuan*h,200,0);//    dc.Rectangle(300,ben*h,400,0);//    dc.Rectangle(500,shuo*h,600,0);//    dc.Rectangle(700,bo*h,800,0);        //画饼图,利用cos,sin函数计算顶点值,颜色沿用之前已经定义了的brush    dc.SelectObject(&br1);    x1=int(r*cos(zhuan*3.14*2))+1400;    y1=int(r*sin(zhuan*3.14*2)+400);  dc.Pie(1000,800,1800,0,1800,400,x1,y1);    dc.SelectObject(&br2);    x2=int(r*cos((ben+zhuan)*3.14*2))+1400;    y2=int(r*sin((ben+zhuan)*3.14*2))+400;    dc.Pie(1000,800,1800,0,x1,y1,x2,y2);    dc.SelectObject(&br3);    x3=int(r*cos((ben+zhuan+shuo)*3.14*2))+1400;    y3=int(r*sin((ben+zhuan+shuo)*3.14*2))+400;    dc.Pie(1000,800,1800,0,x2,y2,x3,y3);    CBrush   br9(RGB(125,30,227));    dc.SelectObject(&br9);    dc.SelectObject(&br4);    dc.Pie(1000,800,1800,0,x3,y3,1800,400);     //在园外右上角画图例,加上说明文字   CRect r5(2000,1000,2080,1060);    dc.FillRect(r5,&br1);    dc.TextOut(2100,1040,"专科");    CRect r6(2000,900,2080,960);    dc.FillRect(r6,&br2);    dc.TextOut(2100,940,"本科");    CRect r7(2000,800,2080,860);    dc.FillRect(r7,&br3);    dc.TextOut(2100,840,"硕士");    CRect r8(2000,700,2080,760);    dc.FillRect(r8,&br4);    dc.TextOut(2100,740,"博士");    // TODO: Add your message handler code here        // Do not call CWnd::OnPaint() for painting messages}

 

PS:

CPaintDCCClientDC的区别

  CPaintDC类是CDC类的一个派生类,一般用在响应WM_PAINT消息的函数OnPaint()中。如果在OnPaint函数内定义了CPaintDC类的对象,通过这个类对象就可以使用CDC类的成员函数完成视图客户区中的图形绘制操作。

  CClientDC类也是CDC类的派生类。它只能在窗口的客户区(即窗口中除了边框、标题栏、菜单栏以及状态栏外的中间部分)中进行绘图,坐标点(0,0)通常指的是客户区的左上角。

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。
    本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/4911321.html,如需转载请自行联系原作者
你可能感兴趣的文章
CentOS6.5固定IP方式上网(NAT)
查看>>
剑破冰山—Oracle开发艺术 书评(by yangtingkun)
查看>>
如何用手机维护Mysql数据库
查看>>
REACT NATIVE 系列教程之十三】利用LISTVIEW与TEXTINPUT制作聊天/对话框&&获取组件实例常用的两种方式...
查看>>
基于CentOS 5.3平台下搭建PXE部署ESX&ESXi 4.x模板分发服务器 v1.0
查看>>
使用tornado模板引擎配合yaml构建nginx配置接口 [扩展saltstack]
查看>>
网络作者的心声-1、感谢读者,我不会太监
查看>>
WCF分布式开发常见错误解决(1):添加服务引用出错
查看>>
Nginx实战基础篇六 通过源码包编译安装部署LNMP搭建Discuz论坛
查看>>
如何根据指定软件版本制作属于自己的puppet yum源
查看>>
Linux下架设rsync服务器
查看>>
Struts2教程8:拦截器概述
查看>>
windows 屏幕坐标 窗口坐标 客户区坐标 逻辑坐标 设备坐标之间的关系及转换
查看>>
在Foreda8上试安装Apchehttpd-2.4.6.tar.gz
查看>>
基于S3C2410的VIVI移植
查看>>
Entity Framwork one to one problem
查看>>
[转] Attach、Detach和DeleteObject
查看>>
[转] C# 获取程序运行目录
查看>>
【OpenCV学习】极坐标变换
查看>>
[Android Pro] InputStream.skip方法的思考
查看>>