VS2013 TeeChart_v5 MFC C++ 使用手册干货(二)TeeChart 实时数据图表
2019-01-16 15:47
1461 查看
版权声明:全部内容仅供学习交流,如需转载请注明出处! https://blog.csdn.net/a897297499/article/details/86504943
在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); }
相关文章推荐
- VS2013 MFC中TeeChart控件画波形使用总结
- VS中MFC图表控件teechart使用的小Demo
- VS2013MFC对话框工程学习笔记六 - 了解C++的数据类型
- 在VS2013 中使用VC 6.0 编写的MFC 程序
- 使用跨平台图表控件TeeChart如何从DAT或TEXT文件中导入数据
- C++ MFC / VS2013 之二 解决方案各个文件结构
- 跨平台图表控件TeeChart使用教程:导入XML数据
- 解决VS2013使用MySQL无法创建ADO.NET实体数据类型的问题
- C++ MFC / VS2013 之十(对话框:非模态对话框的创建及显示)
- VS2013 MFC C++ CString ,const char , char, string 类型转换
- <MFC笔记> VS2013动态库文件的创建及其使用详解
- vs2013下, asp.net mvc5 使用和发布rdlc报表的步骤 ,使用ef来获取数据
- 使用 MFC 串行化数据和 C++ 对象
- VS2013 配置使用微软开源sdk: C++ REST SDK 及运行官方的 JSON例子
- C++ MFC / VS2013 之十四 (对话框:消息对话框)
- 关于VS2013 mfc使用Edit control控件显示输出内容问题
- 使用 MFC 串行化数据和 C++ 对象(二)
- VS2013 MFC做基本对话框界面的一些使用技巧
- C++连接MYSQL数据库(使用MYSQL API方式,环境VS2013+MYSQL5.6)
- 图表控件TeeChart干货分享(绘制2D、3D实时曲线---VC++示例源代码--网络首发)