深入浅出CChart 每日一课——第九课 实时数据显示,期中考试

前几课已经介绍了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;
 

这一步的作用是避免图像闪烁。

第十五步,编译并运行程序。

啥也没有哇!

嗯,别着急,慢慢来。

第十六步,点击菜单 实时数据显示——开始,曲线开始显示。下图是某个时刻的图像。

耶,效果还不错哟。

小结:本节课综合利用前面学习的知识,模拟实现了一个实时数据显示的功能,希望对同学们有所帮助。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值