VS2013 TeeChart_v5 MFC C++ 使用手册干货(二)TeeChart 实时数据图表

在MFC中,要想用TeeChart实现对数据的实时可视化,则需要借助c++中的定时器。关于定时器的具体内容可以在鸡啄米的MFC教程中查看(感谢大神,同时鸡啄米的MFC入门教程也非常棒!我也是看他入得门):
鸡啄米MFC常用类:c++定时器


那么下面直接上东西了:

首先当然是按照上一篇文章中的方法添加TeeChart以及引入相关类,然后需要两部来实现数据显示的实时化。

一、为MFC添加定时器消息处理函数

选择项目,类向导,然后选择自己的对话框类,选择消息,找到定时器消息WM_TIMER,点击添加处理程序,
出现OnTimer后点击确定。

在这里插入图片描述

完成之后再对话框类中应该可以看到如下代码

void CBULABULADlg::OnTimer(UINT_PTR nIDEvent)
{
	// TODO:  在此添加消息处理程序代码和/或调用默认值

	CDialogEx::OnTimer(nIDEvent);
}

到这里就完成了Timer定时器消息处理函数的添加

二、写入实时数据显示程序

1.在界面上添加一个按钮Start,IDC_BUTTONSTART。
2.在按钮的消息处理函数中写入以下代码

void CBULABULADlg::OnBnClickedButtonstrat()
{
	SetTimer(1,1000,NULL);//SetTimer(定时器标识符 , 定时器间隔(ms) , 定时器回调函数)
}

3.在ontimer中写入绘图函数

void CBULABULADlg::OnTimer(UINT_PTR nIDEvent)
{
	// TODO:  在此添加消息处理程序代码和/或调用默认值
	switch (nIDEvent)
	{
	case 1: //定时器1从这里开始执行,当有多个定时器时,根据不同的定时器标识可以使其执行不同的任务
	{
			  CSeries my_series = m_chart.Series(0); //此处为刚刚添加的series序号
			  my_series.Clear();                     //清除上一次的图线
			  srand((unsigned)time(NULL));           //设置随机数种子
			  double y;                              //y坐标
			  for (int x = 0; x < 100; x++)          //画100个点
			  {	
                  //如果需要实时显示采集到的数据,那么把得到的
                  //数据与x,y做替换
				  y = rand() % 100;  // y = 随机数
				  my_series.AddXY(x, y, NULL, NULL);  //添加点到图线
			  }
			  break;
	}
	}
	CDialogEx::OnTimer(nIDEvent);
}

这就是使用Timer定时器实现实时绘图的方法了。


一般这种程序多用于数据采集程序的实时可视化,因此在这里提出一点补充,即对于大数据量下的数据实时绘制方法

1.图表设置上的方法

在这里插入图片描述
双击teechart图表,选择Series选项卡,选择你的图线(这里是Series0),把DrawAll的钩去掉。这样Teechart就会在不改变图线形状的情况下自动减少绘制点数,从而加快绘图。

2.调用AddArray函数绘制

Teechart提供了AddArray函数以应对大数据量情况下的绘图,AddArray的函数声明如下

void AddArray(long ArraySize, VARIANT& YArray, VARIANT& XArray);

从左到右的参数分别为绘制点数,y坐标序列,x坐标序列
使用的方法为:

void CxxxDlg::TeeChartPaint(int order, double dData[]) //order为想要绘制的图线的序号, dData[]为存储了y值的数组
{                          
	COleSafeArray XValues;
	COleSafeArray YValues;
	int nDATALENGTH = 10000;  //绘制点数
	DWORD numElements[] = { nDATALENGTH };
	// Create a safe array    
	XValues.Create(VT_R8, 1, numElements);
	YValues.Create(VT_R8, 1, numElements);
	// Initialization   
	long i;
	double dval;
	for (i = 0; i<nDATALENGTH; i++)
	{
		dval = i;
		XValues.PutElement(&i, &dval);
		dval = dData[i];
		YValues.PutElement(&i, &dval);
		//YValues.PutElement(&i, dData+i);  
	};
	CSeries lineSeries = (CSeries)m_tchart.Series(order);
	lineSeries.Clear();
	lineSeries.AddArray(nDATALENGTH, YValues, XValues);
}
  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值