深入浅出CChart 每日一课——第九课 实时数据显示,期中考试
来源:互联网 发布:网络信息都可信吗 编辑:程序博客网 时间:2024/05/22 03:29
前几课已经介绍了CChart的不少功能,这节课我们稍微停留一下,做一个复习。复习的方法呢,就是一个综合练习:用CChart实现实时数据显示功能。
由于是练习,我们的问题背景可以任意设定。现在假设一台仪器每隔200ms传出两个温度数据。一个温度数据是仪器外的温度,基本是一个恒定值;另一位温度数据是仪器内部的温度,这个温度是随时间变化的,先升温,再降温,不停地循环。
我们按照上一课的方法编程。简单起见,本节课就不处理CChart的交互了。
仍然一步一步来。
第一步到第七步,按照上一课的方法,建立一个名为Lesson09的VC6工程。
第八步,给Lesson09的主窗口添加菜单资源。
图中添加了两个菜单项,其对应ID如下。
开始(S)——ID_REALTIME_START
停止(T)——ID_REALTIME_STOP
第九步,在Lesson09.cpp文件的头部附近添加头文件引用。
#include <time.h>#include <math.h>
这两个头文件后面要用到。
第十步,在第七步中添加的一行代码static CChart chart;的下一行,添加以下代码。
static unsigned int nCount;static bool bRun;static int nTimer;
由于我们是用代码来模拟仪器输入,这个nCount可以控制仪器的输出值。
bRun表示定时器是否运行,nTimer是定时器的代号。
第十一步,建立WM_CREATE消息的响应例程。
case WM_CREATE:chart.SetType(kTypeXY);chart.SetUseLegend(true);chart.SetAxisTitle(_T("时间(分)"), 1);chart.SetAxisTitle(_T("温度(度)"), 0);chart.SetTitle(_T("烘箱温度变化图"));nCount = 0;bRun = false;nTimer = 0;srand( (unsigned)time( NULL ) );break;
这里设置图像的一些参数,并初始化定时器的状态和随机数种子。
第十二步,建立WM_TIMER的响应例程。
case WM_TIMER:if(bRun){double Pi = 3.1415926536;double x, y1, y2;nCount++;x = nCount/10.0;y1 = 20.0 * sin(2.0*Pi/400.0*nCount) + 40.0 + (2.0*rand()/RAND_MAX-1.0);y2 = 20.0 + (2.0*rand()/RAND_MAX-1.0)/2.0;chart.AddPoint2D(x, y1, 0);chart.AddPoint2D(x, y2, 1);if(nCount == 1){chart.SetDataTitle(_T("加热温度"), 0);chart.SetDataTitle(_T("环境温度"), 1);}RECT rt;GetClientRect(hWnd, &rt);InvalidateRect(hWnd, &rt, TRUE);}break;
这里产生模拟的温度数据并添加到图像中。模拟数据中添加了一个随机数,以便产生真实的感觉,呵呵。
第十三步,建立菜单响应函数。在switch(wmid)后面的花括号里面,输入如下代码。
case ID_REALTIME_START:nTimer = SetTimer(hWnd, 1, 200, 0);bRun = true;break;case ID_REALTIME_STOP:if(nTimer>0){KillTimer(hWnd, nTimer);nTimer = 0;}bRun = false;break;
两个菜单分别启动定时器和停止定时器。
第十四步,响应WM_ERASEBKGND消息。
case WM_ERASEBKGND:return 0;
这一步的作用是避免图像闪烁。
第十五步,编译并运行程序。
啥也没有哇!
嗯,别着急,慢慢来。
第十六步,点击菜单 实时数据显示——开始,曲线开始显示。下图是某个时刻的图像。
耶,效果还不错哟。
小结:本节课综合利用前面学习的知识,模拟实现了一个实时数据显示的功能,希望对同学们有所帮助。
- 深入浅出CChart 每日一课——第九课 实时数据显示,期中考试
- 深入浅出CChart 每日一课——快乐高四第九课 于无声处,CChart内置功能介绍之数据存取篇
- 深入浅出CChart 每日一课——第一课 Hello World! CChart学堂之青春没有彩排
- 深入浅出CChart 每日一课——快乐高四第十课 见微知著,CChart内置功能介绍之数据处理篇
- 深入浅出CChart 每日一课——第五课 回到折线图,苦逼屌丝之万丈高楼平地起
- 深入浅出CChart 每日一课——第六课 童心未泯,老狐狸分油饼之饼图
- 深入浅出CChart 每日一课——第八课 又见交互功能,旧爱重逢
- 深入浅出CChart 每日一课——第十一课 分层视图,楼上七班的女孩
- 深入浅出CChart 每日一课——第十二课 共享X轴视图,穆斯林的婚礼
- 深入浅出CChart 每日一课——第十三课 似曾相识之云图,乱花渐欲迷人眼
- 深入浅出CChart 每日一课——第十八课 女神的套娃,玩转对话框
- 深入浅出CChart 每日一课——第十九课 人往高处走,屌丝逆袭白富美之VS2010
- 深入浅出CChart 每日一课——第二十课 窥豹一斑,阶段性总结之毕业典礼
- 深入浅出CChart 每日一课——第七课 屌丝之殇,擎天一柱之柱图
- 深入浅出CChart 每日一课——第二课 上一课代码分析,骨骼精奇之一点即通
- 深入浅出CChart 每日一课——第三课 初识交互功能,那山那水那人
- 深入浅出CChart 每日一课——第四课 等高线图,白富美之第一个高级功能
- 深入浅出CChart 每日一课——第十课 分裂视图,锤子肖哥之错位人格
- to_xueyi
- 2013年各大小IT公司待遇,绝对真实,一线数据!
- 通过shell sqlite3工具创建数据库
- 一个百度程序员的创业故事
- Android小项目之十一 应用程序的主界面
- 深入浅出CChart 每日一课——第九课 实时数据显示,期中考试
- spring集成mongodb封装的简单的CRUD
- CATransition炫一点的动画
- Excel插入时间(精确到秒)
- 现在输入法如果没这个设置就OUT了
- android一些有用的库
- reinterpret_cast說明
- 如何与各种自以为是的技术人员打交道?
- 信道编码