在第一课中,笨笨编写了少量的代码。对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 每日一课——第二课 上一课代码分析,骨骼精奇之一点即通 .相关推荐

  1. 深入浅出CChart 每日一课——快乐高四第五十七课 新的起点,炫彩界面库之老树新芽

    CChart对多种DirectUI库具有良好的适配性,炫彩界面库也不例外.前面已经有两篇关于炫彩界面库的课程,分别是第17课"深入浅出CChart 每日一课--第十七课 时尚加潮流,Dire ...

  2. 深入浅出CChart 每日一课——快乐高四第五十六课 絮絮叨叨,岁月杀猪刀之FAQ

    CChart发布已有多年,QQ交流群也成立了很久.在和网友的交流中,发行了CChart的很多问题,也进行了很多改进和完善. 网友们接触CChart的时间有早有晚,不同的网友经常在群里或私聊的时候提出的 ...

  3. 第一次上计算机课心得,第一次上微机课作文4篇

    第一次上微机课作文4篇 在日复一日的学习.工作或生活中,大家对作文都不陌生吧,作文是通过文字来表达一个主题意义的记叙方法.那么你有了解过作文吗?以下是小编帮大家整理的第一次上微机课作文,供大家参考借鉴 ...

  4. 深入浅出CChart 每日一课——第五课 回到折线图,苦逼屌丝之万丈高楼平地起

    上一课展示了CChart的第一个高级功能,本节课继续第一课的话题,介绍CChart最基本的功能--折线图的绘制. 在第一课中,曲线数据是用AddPoint2D一点一点地加进去的,同学们是不是觉得这个方 ...

  5. 深入浅出CChart 每日一课——快乐高四第五十八课 大道至简,炫彩界面库之接口代码优化

    上节课对CChart在新版炫彩界面库中的使用进行了详细说明,大家看到CChart对炫彩界面库具有完美的兼容性. 但是呢,大家也发现了,要实现CChart的完整功能,需要用户编写的代码不少,杂七杂八地接 ...

  6. 深入浅出CChart 每日一课——快乐高四第五课 梦想的天空,锦上添花之客户区自绘篇

    上节课笨笨给大家介绍了CChart的插件菜单功能,这属于定制功能,给了用户发挥的自由.本节课继续介绍CChart的定制功能,这节课的内容要实用得多,因为定制的是客户区.客户区自绘功能将给您插上理想的翅 ...

  7. 深入浅出CChart 每日一课——第十六课 实习之旅,百年老店之新锐WTL

    上节课笨笨给大家介绍了CChart在微软MFC框架下的应用,本节课的内容仍然和百年老店微软相关,只不过主角换成WTL了. 不了解WTL的同学可以先找度娘温习一下.度娘在怀,今生何求.郎君啊,你是不是闷 ...

  8. 深入浅出CChart 每日一课——快乐高四第五十课 新石器时代,轻装上阵之EasyX窗口绘图

    这一课继续介绍了在控制台程序中绘图,不过控制台窗口稍有变化,是EasyX库生成的控制台窗口. 根据EasyX官方主页的说明,EasyX 是针对 C++ 的图形库,可以帮助C/C++初学者快速上手图形和 ...

  9. 深入浅出CChart 每日一课——快乐高四第三十课 麦正帮主,ActiveX控件巨鲸帮巨鲸岛之易语言篇

    现在呢,笨笨来揭晓上节课留下的悬念.其实笨笨想再介绍一下CChart在著名的国产语言易语言里面的应用. 下一段介绍来自百度百科. 易语言是一门以中文作为程序代码编程语言,其以"易" ...

最新文章

  1. 如何搭建自己的 pip 本地 cache
  2. 在Linux上安装PostgreSQL
  3. dbeaver导出表结构和数据_Oracle 导入导出表空间跟数据表通用操作笔记
  4. jmeter参数化之用户参数
  5. 【Leetcode | 52】257. 二叉树的所有路径
  6. TensorFlow共享变量
  7. Linux入门——环境配置
  8. fly bird用java怎么写,java-flybird_wang-51CTO博客
  9. 申请高德地图API【流程记录】
  10. 在新旧交替的过程中,我们成长着—导师制,舞台和挑战
  11. vue项目 微信支付 和 支付宝支付
  12. “六合上甲”一体化数据开发平台获“2022 DAMA中国数据治理优秀产品”大奖
  13. 闭合导线的近似平均差(工程测量)
  14. 购物车js代码_JS实现购物车商品列表结算功能代码
  15. linux常用命令及通过浏览器访问linux文件功能
  16. 网络监听的防护(电脑篇)
  17. 单个按键,实现单击+双击+长按
  18. 维护国家安全,捍卫国家主权
  19. Poj 1094 拓扑排序Kahn
  20. 日历的实现及数据库的创建修改等操作

热门文章

  1. 怎么给windows7自带截图软件设置快捷键
  2. EmEditor 主题 Minimal
  3. 豌豆荚导致adb连接错误
  4. 世界大师的经典黑白摄影100张
  5. win10计算机内的快捷图标,win10系统任务栏添加计算机快捷图标的图文办法
  6. 一张图学会python编程
  7. 社交神器Tinder现在可以让你用音乐来寻找约会对象
  8. Windows文件服务器监控和审核
  9. 图纸中bs是什么意思_二结构图纸墙体缩写ALD、ALW、DW、BF、ALG、是什么意思?谢谢!...
  10. qt4.8.6交叉编译详解