深入浅出CChart 每日一课——第五课 回到折线图,苦逼屌丝之万丈高楼平地起
上一课展示了CChart的第一个高级功能,本节课继续第一课的话题,介绍CChart最基本的功能——折线图的绘制。
在第一课中,曲线数据是用AddPoint2D一点一点地加进去的,同学们是不是觉得这个方法有点傻?要是有几百个上千个数据点的话,岂不得累死!
下面介绍CChart类的一个函数。
int AddCurve(double *pX, double *pY, int nLen, int nPlotIndex=0);
从名字就可以看出,这个函数是用来添加曲线的。
首先看看函数的参数。pX和pY是两个double型数组,用来存放曲线的x坐标与y坐标;nLen表示数据点的个数;nIndex参数稍微解释一下,这个表示子视图的序号。CChart可以处理分裂视图、分层视图,这些视图具有子视图,nPlotIndex表示需要往第nPlotIndex个子视图上添加曲线。
再看看函数的返回参数,是一个int值,表示曲线的ID号。
CChart可以绘制多条曲线,在程序内部,多条曲线是用vector的方式存放的。Vector类似数组,可以用下标来存取。但CChart支持曲线的排序、插入、删除等操作,经过这些过程后,曲线在vector中的下标会改变。怎样保证曲线标识的唯一性呢,这就是曲线的ID。
简单地说,曲线的ID号就相当于人的身份证号,人的身份证号在人的一生中是唯一的且不变的(当然,如果你是房爷赵海滨,你可以拥有无数的身份证号,外加无数套房子,但这不在我们的考虑之列)。曲线的ID号也如此,无论曲线经过多少次排序、插入、删除操作,都始终保持不变。
曲线的ID号在CChart中应用非常之多,这是后话,这里暂且跳过。
下面利用AddCurve来增加曲线。
与前面的课程一样,建立一个VC6项目,名称为Lesson05。
把WM_CREATE消息的响应例程写成这样。
case WM_CREATE:chartWnd.Attach(hWnd, kTypeXY);{double pX[360], pY[360];double Pi = 3.1415926536;int i;for(i=0; i<360; i++){pX[i] = i;pY[i] = 5.0*sin(i*2.0*Pi/360.0*3.0);}chartWnd.GetChart()->AddCurve(pX, pY, 360);}chartWnd.GetChart()->SetTitle(_T("CChart绘制折线图"));break;
在Lesson05.cpp文件头部附近加上下面一句。
#include <math.h>
这句话的用途不用笨笨唠叨了吧。
程序的其余部分和前几课的完全一样。
运行程序,效果如图。
这里绘制了一条正弦曲线。
上面的代码首先准备了两个数组pX和pY用来存放数据点,然后用AddCurve把曲线加了进来。
既然上面用的函数叫AddCurve,顾名思义,曲线还能继续加。让我们修改WM_CREATE消息的响应例程如下。
case WM_CREATE:chartWnd.Attach(hWnd, kTypeXY);{double pX[360], pY[360];double Pi = 3.1415926536;int i;for(i=0; i<360; i++){pX[i] = i;pY[i] = 5.0*sin(i*2.0*Pi/360.0*3.0);}chartWnd.GetChart()->AddCurve(pX, pY, 360);for(i=0; i<360; i++){pX[i] = i;pY[i] = 2.0*cos(i*2.0*Pi/360.0*3.0);}chartWnd.GetChart()->AddCurve(pX, pY, 360);}chartWnd.GetChart()->SetTitle(_T("CChart绘制折线图"));break;
上面又添加了一条曲线,运行效果如图。
第二条曲线画出来啦!
理论上只要你的计算机内存够大,你想加多少条曲线都是可以的,CChart本身对曲线的条数是没有限制的。
下面讨论一些别的问题。
在第三课中,我们利用右键菜单,在屏幕上调出了图例。下面我们用代码的方式调出图例。
同样在WM_CREATE的响应例程里面,在break;这一行的前面,添加下面一句话。
chartWnd.GetChart()->SetUseLegend(true);
运行效果如图。
现在屏幕上有两条曲线,图例里面也有两个标识,图例中标识的颜色和曲线的颜色是对应的。
图例标识中的一串字母和数字就是那条曲线的名称,有需要的话,把名称改成中文的也没有问题。下面我们就试试看,把第一条曲线的名称改成“王菲”,第二条曲线的名称改成“李亚鹏”。
同样在WM_CREATE的break;这一行的前面,添加下面两句话。
chartWnd.GetChart()->SetDataTitle(_T("王菲"), 0);
chartWnd.GetChart()->SetDataTitle(_T("李亚鹏"), 1);
运行程序,效果出来啦!
这里解释一下CChart类的SetDataTitle函数,其原型如下。
void SetDataTitle(const TCHAR* title, int nDataIndex, int nPlotIndex=0);
第一个参数title当然就是要设置的数据名称了;第二个参数nDataIndex表示曲线的序号,按照添加的顺序,从0开始计算;第三个参数nPlotIndex表示子图的序号,从0开始计算,默认为0,也就是第一个子图,这个参数仅仅对于分裂视图、分层视图、共享X轴视图有效。
下面再关注一下坐标轴。从上面的图中,我们看到坐标轴没有标题,现在我们给两个坐标轴都加上标题。
同样在WM_CREATE的break;这一行的前面,添加下面两句话。
chartWnd.GetChart()->SetAxisTitle(_T("横轴"), 1);
chartWnd.GetChart()->SetAxisTitle(_T("纵轴"), 0);
运行效果如图。
SetAxisTitle的定义如下。
void SetAxisTitle(const TCHAR* title, int location, int nPlotIndex=0);
第一个参数title当然就是要设置的坐标轴名称了;第二个参数location表示坐标轴位置,这里需要解释一下,左坐标轴为0,下坐标轴为1,右坐标轴为2,上坐标轴为3,这个问题大家可以打开Chart.h,看看文件头部被注释掉的一些enum定义,就完全清楚了;第三个参数nPlotIndex表示子图的序号,默认为0。
最后我们来看看背景网格。
同样在WM_CREATE的break;这一行的前面,添加下面两句话。
chartWnd.GetChart()->SetGridLine(true, true, true, true);
chartWnd.GetChart()->SetBkgndColor(RGB(224, 224, 224));
这下图像和原来大不一样了。
SetGridLine设置网格的绘制情况,定义如下。
void SetGridLine(bool MajorH=true, bool MajorV=true, bool MinorH=false, bool MinorV=false, int nPlotIndex=0);
CChart的背景网格有两套,分别是主网格和副网格。SetGridLine的前四个参数分别表示是否绘制主网格横线、主网格竖线、副网格横线、副网格竖线,第五个参数是子图序号,前面已经解释。
SetBkgndColor设置背景颜色,定义如下。
void SetBkgndColor(COLORREF color, int nPlotIndex=0);
参数不用笨笨给大家解释了吧。
好了,这节课笨笨快累晕了,赶紧下课吧。
深入浅出CChart 每日一课——第五课 回到折线图,苦逼屌丝之万丈高楼平地起相关推荐
- 深入浅出CChart 每日一课——快乐高四第五十七课 新的起点,炫彩界面库之老树新芽
CChart对多种DirectUI库具有良好的适配性,炫彩界面库也不例外.前面已经有两篇关于炫彩界面库的课程,分别是第17课"深入浅出CChart 每日一课--第十七课 时尚加潮流,Dire ...
- 深入浅出CChart 每日一课——快乐高四第五十六课 絮絮叨叨,岁月杀猪刀之FAQ
CChart发布已有多年,QQ交流群也成立了很久.在和网友的交流中,发行了CChart的很多问题,也进行了很多改进和完善. 网友们接触CChart的时间有早有晚,不同的网友经常在群里或私聊的时候提出的 ...
- 深入浅出CChart 每日一课——第二课 上一课代码分析,骨骼精奇之一点即通 .
在第一课中,笨笨编写了少量的代码.对CChart不熟悉的人对部分代码可能不能理解,下面给同学们解释一下. 第一段代码如下. #include "Chart.h" #ifdef _D ...
- 商务汇报PPT制作的七堂课-第五课:图片排版
转眼之间来到了第五课,PPT图片排版 那美化完了文字,接下来就到了PPT中占比也比较大的图片排版了,我们常说文不如表,表不如图,一图胜千言,所以图片很多时候可以帮助我们减少很多语言的描述,让人一目了然 ...
- 深入浅出CChart 每日一课——快乐高四第五课 梦想的天空,锦上添花之客户区自绘篇
上节课笨笨给大家介绍了CChart的插件菜单功能,这属于定制功能,给了用户发挥的自由.本节课继续介绍CChart的定制功能,这节课的内容要实用得多,因为定制的是客户区.客户区自绘功能将给您插上理想的翅 ...
- 深入浅出CChart 每日一课——快乐高四第五十八课 大道至简,炫彩界面库之接口代码优化
上节课对CChart在新版炫彩界面库中的使用进行了详细说明,大家看到CChart对炫彩界面库具有完美的兼容性. 但是呢,大家也发现了,要实现CChart的完整功能,需要用户编写的代码不少,杂七杂八地接 ...
- 深入浅出CChart 每日一课——快乐高四第五十课 新石器时代,轻装上阵之EasyX窗口绘图
这一课继续介绍了在控制台程序中绘图,不过控制台窗口稍有变化,是EasyX库生成的控制台窗口. 根据EasyX官方主页的说明,EasyX 是针对 C++ 的图形库,可以帮助C/C++初学者快速上手图形和 ...
- 深入浅出CChart 每日一课——快乐高四第五十二课 旧梦重温,天上人间之炫彩界面库
早在第十七课,就已经介绍了CChart在炫彩界面库中的使用方法.不过呢,那里的方法有一点小问题,就是我们有点霸道,占用了整个客户区.一般情况下,这样是不太合适的,因此,笨笨一直有重写一个炫彩教程的想法 ...
- 深入浅出CChart 每日一课——快乐高四第五十一课 蹒跚学步,轻松自在之Win32++
WIN32++是封装了Win32API的C++项目.项目地址:http://sourceforge.net/projects/win32-framework/files/?source=navbar. ...
最新文章
- 当代的设计潮流是什么_解码“潮流合伙人”IP生意经
- spring mvc @RequestBody @ResponseBody 解析流程
- QT的QSound类的使用
- HDU 2034 人见人爱A-B【STL/set】
- 抖音计算机音乐你要我,抖音你要我怎么做是什么歌 抖音你要我怎么做怎么说才能爱我歌曲介绍...
- css样式引入方式,及常用设置标签样式
- MOSS服务器场迁移1-有关切换登录用户时需要刷新一次才能成功的问题
- 学习笔记3 :pyqt5 显示opencv 和 PIL图片
- Java零基础入门 : (2) 代码编辑器IDEA安装与配置
- 操作系统时间片轮换_操作系统 时间片轮转法
- 开源直播OBS ( Open Broadcaster Software ) 多机位,多场景切换
- HBase EndPoint加载失败
- 第一次java实验报告
- 新中大银色快车数据恢复
- Android 获取assets文件夹下面的文件路径
- 马斯克疯狂理念在中国落地?国产高速飞行列车即将登场
- 导数和微分的区别与联系
- HDU 6304 Chiaki Sequence Revisited(找规律)
- There is no Qt version assigned to project
- eclipse开发安卓android程序环境
热门文章
- UEStudio09.20.0.1007 注册码
- mac移动鼠标光标会变大_如何在Mac上使鼠标光标变大或变小
- 元学习:实现通用人工智能的关键!
- Mac 解压缩rar文件
- qs计算机专业排名2017,2017年最新世界大学专业排名权威发布!
- Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.Generi
- 清朝盛衰的六个时间点!
- 自制滚动的天空,原来很简单,就差细节来人给做做
- 记一次Mysql并发死锁,引出的问题及讨论
- Altium Designer 制造输出 各文件后缀的含义