深入浅出CChart 每日一课——第二课 上一课代码分析,骨骼精奇之一点即通 .
在第一课中,笨笨编写了少量的代码。对CChart不熟悉的人对部分代码可能不能理解,下面给同学们解释一下。
第一段代码如下。
#include "Chart.h"
#ifdef _DEBUG
#pragma comment(lib, "PlotDll_d.lib")
#else
#pragma comment(lib, "PlotDll.lib")
#endif
这一段大家应该很好理解,这是C++的预处理。
首先包含头文件Chart.h。
然后根据是否编译Debug版本选择不同的导入库。如果编译Debug版本,需要链接PlotDll_d.lib这个导入库,运行的时候会载入PlotDll_d.dll。如果编译Release版本,需要链接PlotDll.lib这个导入库,运行的时候会载入PlotDll.dll。
第二段代码如下。
static CChartWnd chartWnd;
这句话定义了一个 CChartWnd类的变量 chartWnd。
首先解释一下CChartWnd类。
为完成各种绘图操作,CChart类库中具有大量的类,绘图工作就由这些类完成。但CChart内部类的定义都是模板形式,使用不甚方便,故笨笨做了一个包装类CChart,隐藏了模板类的实现细节。
而CChartWnd类则是在CChart类的基础上实现的一个窗口类,建立这个类的目的是为了自动实现消息响应,减少同学们编写的代码量。CChartWnd同时是一个窗口,可以理解为MFC中的CWnd,当然它和CWnd没有关系,CChart整个类库都与MFC没有关系。
要用几句话完全解释清楚CChartWnd类是比较困难的,不清楚的同学可以在下载的CChartDll.7z文件中查看说明书。
这里把chartWnd变量设置为static,原因是chartWnd变量的定义位置在窗口函数WndProc内部,不设置static属性的话,WndProc一退出,chartWnd就被释放掉了。如果把chartWnd设置为全局变量,就可以不用static了。
第三段代码如下。
case WM_CREATE:chartWnd.Attach(hWnd, kTypeXY);chartWnd.GetChart()->AddPoint2D(-3.0, 9.0);chartWnd.GetChart()->AddPoint2D(-2.0, 4.0);chartWnd.GetChart()->AddPoint2D(-1.0, 1.0);chartWnd.GetChart()->AddPoint2D(0.0, 0.0);chartWnd.GetChart()->AddPoint2D(1.0, 1.0);chartWnd.GetChart()->AddPoint2D(2.0, 4.0);chartWnd.GetChart()->AddPoint2D(3.0, 9.0);chartWnd.GetChart()->SetTitle(_T("Hello World,我的第一个CChart程序!"));break;
这段代码响应WM_CREATE消息,在窗口创建的时候设置绘图的数据和属性。
chartWnd.Attach(hWnd,kTypeXY);
这句话即“粘窗口”,相当于把CChartWnd这个窗口“粘”到程序的主窗口上。
第一个参数hWnd即是主窗口句柄。
第二个参数kTypeXY是本人定义的一个enum,实际上也就是一个int变量,表示绘图的类型。kTypeXY表示最简单的折线图,当然还有很多种绘图类型,这里不详述。
注意“粘窗口”以后,主窗口的消息循环被chartWnd的消息循环替代了。大家不用担心,CChartWnd只处理少量必要的消息,剩余消息还是交给主窗口原来的消息处理函数处理。
chartWnd.GetChart()->AddPoint2D(-3.0,9.0);
CChartWnd的函数CChartWnd::GetChart()获得包装的CChart类指针。
CChart::AddPoint2D(doublex,doubley)同学们应该很好理解吧,在图像上增加一个数据点。
这里一共增加了7个数据点。
chartWnd.GetChart()->SetTitle(_T("HelloWorld,我的第一个CChart程序!"));
这句话设置图像的标题,也很好理解。
第四段代码如下。
chartWnd.Detach();
这句话放置在消息 WM_DESTROY的响应代码中。
前面在WM_CREATE消息中把chartWnd“粘”到了主窗口上,这里在程序退出钱,把chartWnd窗口从主窗口上“取”下来。因为chartWnd已经接管主窗口的消息循环,不这样的话,消息循环就乱了。
第五段代码如下。这段代码不是我们要编写的,而是我们要删除的。
case WM_PAINT:hdc = BeginPaint(hWnd, &ps);// TODO: Add any drawing code here...RECT rt;GetClientRect(hWnd, &rt);DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);EndPaint(hWnd, &ps);break;
由于chartWnd已经接管主窗口的消息循环,这段话实际上不起作用,也就是聋子的耳朵——纯粹摆设了,所以删掉它。实际不删也没关系,只是笨笨有点洁癖,呵呵。
第二课结束,大家还有问题吗?有问题请打开CChartDll.7z文件里面的说明书看看。
下一课是激动人心的一刻,介绍CChart的消息响应,而且不需要编写任何代码。世界上有免费的午餐吗?见证奇迹的时刻就要到了。敬请期待。
现在下课。
转载于:https://blog.51cto.com/baita00/1301792
深入浅出CChart 每日一课——第二课 上一课代码分析,骨骼精奇之一点即通 .相关推荐
- 深入浅出CChart 每日一课——快乐高四第五十七课 新的起点,炫彩界面库之老树新芽
CChart对多种DirectUI库具有良好的适配性,炫彩界面库也不例外.前面已经有两篇关于炫彩界面库的课程,分别是第17课"深入浅出CChart 每日一课--第十七课 时尚加潮流,Dire ...
- 深入浅出CChart 每日一课——快乐高四第五十六课 絮絮叨叨,岁月杀猪刀之FAQ
CChart发布已有多年,QQ交流群也成立了很久.在和网友的交流中,发行了CChart的很多问题,也进行了很多改进和完善. 网友们接触CChart的时间有早有晚,不同的网友经常在群里或私聊的时候提出的 ...
- 第一次上计算机课心得,第一次上微机课作文4篇
第一次上微机课作文4篇 在日复一日的学习.工作或生活中,大家对作文都不陌生吧,作文是通过文字来表达一个主题意义的记叙方法.那么你有了解过作文吗?以下是小编帮大家整理的第一次上微机课作文,供大家参考借鉴 ...
- 深入浅出CChart 每日一课——第五课 回到折线图,苦逼屌丝之万丈高楼平地起
上一课展示了CChart的第一个高级功能,本节课继续第一课的话题,介绍CChart最基本的功能--折线图的绘制. 在第一课中,曲线数据是用AddPoint2D一点一点地加进去的,同学们是不是觉得这个方 ...
- 深入浅出CChart 每日一课——快乐高四第五十八课 大道至简,炫彩界面库之接口代码优化
上节课对CChart在新版炫彩界面库中的使用进行了详细说明,大家看到CChart对炫彩界面库具有完美的兼容性. 但是呢,大家也发现了,要实现CChart的完整功能,需要用户编写的代码不少,杂七杂八地接 ...
- 深入浅出CChart 每日一课——快乐高四第五课 梦想的天空,锦上添花之客户区自绘篇
上节课笨笨给大家介绍了CChart的插件菜单功能,这属于定制功能,给了用户发挥的自由.本节课继续介绍CChart的定制功能,这节课的内容要实用得多,因为定制的是客户区.客户区自绘功能将给您插上理想的翅 ...
- 深入浅出CChart 每日一课——第十六课 实习之旅,百年老店之新锐WTL
上节课笨笨给大家介绍了CChart在微软MFC框架下的应用,本节课的内容仍然和百年老店微软相关,只不过主角换成WTL了. 不了解WTL的同学可以先找度娘温习一下.度娘在怀,今生何求.郎君啊,你是不是闷 ...
- 深入浅出CChart 每日一课——快乐高四第五十课 新石器时代,轻装上阵之EasyX窗口绘图
这一课继续介绍了在控制台程序中绘图,不过控制台窗口稍有变化,是EasyX库生成的控制台窗口. 根据EasyX官方主页的说明,EasyX 是针对 C++ 的图形库,可以帮助C/C++初学者快速上手图形和 ...
- 深入浅出CChart 每日一课——快乐高四第三十课 麦正帮主,ActiveX控件巨鲸帮巨鲸岛之易语言篇
现在呢,笨笨来揭晓上节课留下的悬念.其实笨笨想再介绍一下CChart在著名的国产语言易语言里面的应用. 下一段介绍来自百度百科. 易语言是一门以中文作为程序代码编程语言,其以"易" ...
最新文章
- 如何搭建自己的 pip 本地 cache
- 在Linux上安装PostgreSQL
- dbeaver导出表结构和数据_Oracle 导入导出表空间跟数据表通用操作笔记
- jmeter参数化之用户参数
- 【Leetcode | 52】257. 二叉树的所有路径
- TensorFlow共享变量
- Linux入门——环境配置
- fly bird用java怎么写,java-flybird_wang-51CTO博客
- 申请高德地图API【流程记录】
- 在新旧交替的过程中,我们成长着—导师制,舞台和挑战
- vue项目 微信支付 和 支付宝支付
- “六合上甲”一体化数据开发平台获“2022 DAMA中国数据治理优秀产品”大奖
- 闭合导线的近似平均差(工程测量)
- 购物车js代码_JS实现购物车商品列表结算功能代码
- linux常用命令及通过浏览器访问linux文件功能
- 网络监听的防护(电脑篇)
- 单个按键,实现单击+双击+长按
- 维护国家安全,捍卫国家主权
- Poj 1094 拓扑排序Kahn
- 日历的实现及数据库的创建修改等操作