VC中使用TeeChart绘制实时曲线

上网找了一个teechart8的Activex版本,在VC6下使用正常,感觉功能挺强大的,于是决定认真用一用,我是完全完全的新手,请高手们直接忽略我,或者给我提些好的建议。

  我得到的是一个teechart8.ocx文件,这是Activex的文件,使用之前先注册一下,将该文件放入系统目录下/c:/WINDOWS中,然后打开命令提示符,或者直接在运行窗口输入:regsvr32 TeeChart8.ocx,然后会有一个注册成功的提示框,说明我们的ActiveX控件注册成功,在VC6下就可以使用了。如果不想使用了,可以使用regsvr32 -u TeeChart8.ocx 解除对teechart8的注册。

  我的第一个任务是熟悉teechart控件。首先新建一个基于MFC的exe工程,选择对话框,其他默认。进入工程以后可以看到类视图中只有系统生成的默认的几个类,我先在类视图中在工程名上点右键新建两个文件夹,一个叫src,一个叫tee,然后把默认生成的几个类(dlgappabout三个类)拖放到src文件夹中。做这一步实际上没有什么实质的意义,只是为了看起开比较方便,因为一会儿添加了teechart8以后会有很多的类添加进来,看起来非常困难,所以先提前把他们分开。

  闲话不多说,进入资源视图,点击主对话框后,删除todo那个静态文本。下一步我们要在这个对话框上放置一个teechart图表,但是工具栏中没有,所以需要先添加一下。依次点击 工程-》增加到工程-components and controls,进入对话框后选择registered ActiveX controls,找到TeeChart Pro Activex control v8后点击insert,会弹出添加类的对话框,左边的列表里面是可以选择添加的类,现在我还不太了解具体类的作用,所以只好一并添加了,点击确定以后回到资源视图会发现工具栏下面多累一个圆形的小图标,这就是我们的teechart8控件了。这时注意到,类视图中已经为我们添加了一堆的类,我把他们都放到tee文件夹中,看起来舒服多了。

  下一步回到资源视图,将工具箱中的teechart控件托入对话框,改变一下大小,稍作修改,界面设计就完成了。下一步要让teechart输出一个图形,那这次的任务就大功告成了。在对话框上右键点击图标控件,点击属性,选择teechart pro editer 选项卡,点击edit chart ,出现一个名为edit的对话框,该对话框非常重要,包括了teechart的各种属性。简要介绍一下这些属性,我的参考资料是“TEECHART应用技术详解”一书,该书是通过delphi描述的,我没有学过delphi,勉强看着。首先就是series选项,该属性包含的是需要绘制的图表的类型,如曲线,饼图,柱状图,等等等等,种类很多,这也是teechart的优势。其次是chart,这个选项包含了图表的显示部分的很多属性,如坐标轴,背景,标题,等等。data选项中就是绘制图表需要的数据。export选项中包含了一些将图表导出为图片等格式的选项。print选项包含打印的设置。themes包含图表的主题,主要是显示方式。

  介绍完这写选项以后,试着新建了一个serie,我建立的是fast line,准备做一个实时曲线的显示,于是又更改了一下标题,改为实时曲线,并将chart选项中的legend的Visible前面的勾去掉。OK,编译,运行。发现什么都没有~~~别说实时曲线了,就连曲线也没有一根。其实很容易理解,画曲线得有数据吧,数据都没有怎么给你画呢?所以,还得给该曲线填充一点数据。最简单的方法就是,直接在data选项中添加一些数据,然后运行,发现我们可爱的图表显示出曲线了。

好,熟悉teechart的基本任务完成。下一次我接着在这个基础上试着绘制实时曲线。

 

实时曲线

 接着上一篇文章,本次我的任务是绘制一个实时曲线图,可以实现坐标轴以及曲线随着数据的增加而移动。

  要完成该功能,首先应该为该图表指定一个对象用于操作。单击图表,选择 建立类向导,点击member variables选项卡,点击add variable按钮,弹出添加变量对话框,输入m_chart后点击OK,一个与该图表控件对应的控件变量就建立完成了。进入类视图,看到dlg类中多了一个m_chart变量。

  首先,我们利用该变量为该图表填充随机的初始数据。在使用之前,需要包含一些头文件,于是,在XXXDlg.cpp的上面添加如下代码:

 

#include "tchart.h"
#include "axis.h"
#include "axes.h"
#include "scroll.h"
#include "series.h"

 

  然后在OnInitDialog()方法中添加如下代码:

 

// TODO: Add extra initialization here
m_chart.Series(0).FillSampleValues(50);

 

  这是点击运行以后,就可以看到图表控件上输出了50个点连成的曲线了。如下图所示

 

 【转帖】VC中使用TeeChart绘制实时曲线
 

 

  下一步我们要做的是让曲线动起来。简单分析一下,要让曲线动起来,可以将左侧的点隐藏,右侧再增加一些新的点。我们可以设置一个定时器,比如1s,每隔1s增加一个数,这样的话数据就可以不断增长了。

  即添加如下代码:

 

//在OnInitDialog()中添加
SetTimer(1,1000,NULL);
 

  然后为dlg类添加WM_TIMER的消息响应函数,并添加代码:

 

void CChartDlg::OnTimer(UINT nIDEvent)
{
    // TODO: Add your message handler code here and/or call default
    m_chart.Series(0).Add(900,"lable",1);
    CDialog::OnTimer(nIDEvent);
}

 

  这里需要说明一下,add方法的三个参数,第一个为y值,我添加的是900,第二个为x轴的标签,第三个我不懂,希望有知道的人告诉我一声,谢谢了。添加完毕后可以运行了,这时大家可以发现曲线在动,横坐标消失,变成了lable,而且左侧的曲线没有移出界面,而是曲线整个压缩,这不是我们想要的效果。所以我们还要再做更改。

  首先进入资源视图,点击对话框,右键单击编辑属性点击tools选项,单击add添加工具。teechart8有很多的工具给我们选择,这里我们点击axis选项卡,选中axis scroll工具后点击add后回到编辑窗,在axis下拉框中选择bottom axis,然后关闭属性编辑即可。

  接下来,需要实现坐标轴的移动。很简单,只需要在OnTimer中添加中间的那一句代码,

 

void CChartDlg::OnTimer(UINT nIDEvent)
{
    // TODO: Add your message handler code here and/or call default
    m_chart.Series(0).Add(900,"lable",1);
    m_chart.GetAxis().GetBottom().Scroll(1.0,TRUE);

    CDialog::OnTimer(nIDEvent);
}

  完成后运行,基本就可以了。坐标轴和曲线后可以移动了。还有些需要更改的地方,比如横坐标改成时间显示,新增的点不是固定的900,而是随机数。这些都比较简单,读者自行琢磨吧~~~

  本次的任务就基本完成了,下一次想实现从数据库中读取数据进行绘图。

转:http://blog.sina.com.cn/s/blog_7f0c435401017t05.html

展开阅读全文

没有更多推荐了,返回首页