当前位置:文档之家› VS2010使用TeeChart绘图控件

VS2010使用TeeChart绘图控件

VS2010使用TeeChart绘图控件
VS2010使用TeeChart绘图控件

VS2010 使用TeeChart绘图控件- 之一- 控件和类的导入

vs2010的用法和vc6有很大的不同,特别是在一些函数调用那里,当然。控件导入也是很不一样的

安装好控件后就可以在工程里加入teechart控件了

加入方法有如下几种:

1.添加Teechart控件

1.1 插入Teechart控件

1.1.1 插入控件

新建一个对话框工程,在对话框上点击鼠标右键,弹出的菜单里选择“插入ActiveX控件”

然后弹出的对话框里选择TeeChart控件

这时对话框就有TeeChart控件了

1.1.2 vs2010另外一种插入控件的方法

vs2010对话框设置的工具栏上就有许多控件了,若想把我们常用的控件也加到工具栏上以后使用就很方便了,下面说的这种方法就是把控件加入工具栏里。方便以后的调用

在工具栏的空白处点击右键,选择添加选项卡

这时vs就会新建一个选项卡,自己可以定义一个名称,这里命名为绘图控件

为选项卡添加项:在新建的选项卡的空白处点击右键,选择“选择项”

由于控件比较多,会耗费一定的时间打开这个选择项,别以为死机了,耐心等个几十秒吧

在打开的对话框中选择选择com标签,选择teechart控件

这样teechart控件就会在你的工具栏新加的选项里了,以后都会存在(我添加TeeChat的同时还把其他的一些控件添加进去了)

1.1.3 控件属性设置

双击控件进行相关设置

这里添加一个快速线图-Fast Line

若数据量特别大,可以在Series标签里的Format的Draw all选项去掉

在Chart标签里还可以设置坐标轴的名称属性等,这里先不详细讲述属性的设置2.为控件添加类

vs2010与vc6不一样,vs2010的控件对应的类添加相对比vc6麻烦

这里就对刚刚加入的TeeChart控件加入相关的类

2.1 添加TypeLib的mfc类

(1)选择vs菜单“项目”-“添加类”(注意这时类视图树形控件选中最顶端的父节点)

(2)添加TypeLib的mfc类

(3)在可用的类型库里选择teechart5

(4)在接口里就有TeeChart对应的所有类了,这里TChart是必须的接口,其他的可以根据需要添加

(5)点击完成就把CTChart这个类添加进工程里了

其实第(2)步可以选择ActiveX控件的Mfc类,操作方法雷同,不过这时是只列出对应的接口

3.把TeeChart控件和对象关联

3.1 为控件关联对象

在控件上点击右键,选择添加变量,即可为控件关联对象

3.2 去掉vs默认的初始化

不知为何vs会默认给添加的变量初始化0,这个初始化一定要去掉否则无法使用

public: CTchart1 m_Chart;

CTeeChartDlg::CTeeChartDlg(CWnd* pParent/*=NULL*/)

: CDialogEx(CTeeChartDlg::IDD, pParent)

{

m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

void CTeeChartDlg::DoDataExchange(CDataExchange* pDX)

{

CDialogEx::DoDataExchange(pDX);

DDX_Control(pDX, IDC_TCHART1, m_Chart);

}

这时TeeChart就可正常使用了

VS2010 使用TeeChart绘图控件- 之二- 绘制图形(折线图,柱状图)

1.前期准备

具体可见VS2010 使用TeeChart绘图控件- 之一控件和类的导入

1. 1 添加TeeChart控件,给控件添加变量

m_TeeChart

添加TeeChart控件,右击控件,选择添加变量,vs会自动给我们引入CTchart1这个类,但是只有这个类,我们是远远不够的,需要添加teechart其他相关的类,添加方法在之前已经讲过,不再重复。

1.2. 引入必要的头文件

其实之前的方法比较麻烦,更简单就是通过类向导,导入类型库的类如图进入类向导,选择添加类按钮的下拉菜单,选择类型库中的MFC 类

选择teechart5即可

暂时引入

#include "CSeries.h"

#include "CAxis.h"

#include "CAxes.h"

#include "CLegend.h"

需要还可以继续在之后引入

--------------------------------------------------------------------------------------------------------------------------------

2. teechart 画图- 折线图

TeeChart 画图步骤一般是先获得图线序列CSeries,再给Series添加点;添加点可以用函数AddXY,或者AddArray。AddArray要比AddXY 的效率高出很多,其比较可见TeeChart绘图控件- 之三- 提高绘图的效率

2.1 清除图形

在画线之前把图形清除一下,否则会覆盖,清除可用CSeries的函数Clear();

但是当添加多个Series后要对所有Series都clear,这是很蛋疼的,因为你有时都不知道有多少个Series,这样可以先获得Series的总数在clear

代码如下

for(long i =0;i

{

((CSeries)m_TeeChart.Series(i)).Clear();

}

通过CTchart 的get_SeriesCount函数获得所有图像序列,再全部清除,这个函数经常用到,可用定义为类成员函数,这里是个对话框CTChartDlg

void CTChartDlg::ClearAllSeries(void)

{

for(long i =0;i

{

((CSeries)m_TeeChart.Series(i)).Clear();

}

}

好了现在开始说说怎么画折线图

2.2 普通连线图

一般我们画的图都属于这种,就是把点连接起来,选择fast line 的Normal,就是普通连线图

在需要画图的地方先要获得曲线序列Series,然后通过画图函数AddXY,或者AddArray作图。

2.2.1 普通线图- AddXY

下面演示AddXY的方法

AddXY就是一个一个加入点,在点数不多,且需要动态显示的时候是不错的选择。点数多的情况下嘛,那就还是用AddArray了

先看看AddXY

const UINT nDATALENGTH=100;

double dData[nDATALENGTH];

for (int i=0;i

{

dData[i] = 100 * sin((float)i)*cos((float)4*i);

}

//ClearAllSeries();

CSeries lineSeries = (CSeries)m_TeeChart.Series(0);

lineSeries.Clear();//在最前面加上ClearAllSeries(ClearAllSeries 是自己写的函数)就不用了

for(int i=0;i

{

lineSeries.AddXY((double)i,dData[i],NULL,0);

}

由于在TeeChart里,只加了一个FastLine,所以Series(0)就算Fast Line,代码首先获得图像序列m_TeeChart.Series(0);

然后再调用这个序列来作图,作图前先清空图像,用

ClearAllSeries()也可以

然后就是一个点一个点的往里加了

做出来的效果:

AddXY的第一个参数是x点坐标,第二个是y点坐标,第三个参数是为了使x坐标特殊显示,这是会替换掉x坐标的显示内容,如我想显示“点xx“可以这样

CString str;

for(int i=0;i

{

str.Format(_T("点%d"),i);

lineSeries.AddXY((double)i,dData[i],str,0);

}

第四个参数在线图里不起作用,在柱状图里可以设置颜色

2.2.2 普通线图- AddArray

在数据量特别大时,强烈建议使用AddArray函数

AddArray的函数声明如下

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

x,y是两个VARIANT的数据类型,VARIANT有个类型是VT_ARRAY

可以给VARIANT赋一个数组进去

具体操作如下:

方法1:

const UINT nDATALENGTH =100;

double dData[nDATALENGTH];

for (int i=0;i

{

dData[i] =100*sin((float)i)*cos((float)4*i);

}

//声明如下数据:

VARIANT vAX,vAY;

SAFEARRAY* psax;

SAFEARRAY* psay;

SAFEARRAYBOUND rgsabound;

//初始化

rgsabound.cElements=nDATALENGTH;

rgsabound.lLbound=0;

psax=SafeArrayCreate(VT_R8,1,&rgsabound);//分配空间

psay=SafeArrayCreate(VT_R8,1,&rgsabound);

vAX.vt=VT_ARRAY|VT_R8;//设置为double型数组,VT_R8就是指double vAX.parray=psax;//把内容加入VARIANT中

vAY.vt=VT_ARRAY|VT_R8;

vAY.parray=psay;

//这时VARIANT 就可以加入数据了

double dtemp;//用来临时存放x坐标

for(long i=0;i

{

dtemp = i;

SafeArrayPutElement(psax,&i,&dtemp);

dtemp = dData[i];

SafeArrayPutElement(psay,&i,&dtemp);

相关主题
文本预览
相关文档 最新文档