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

1.前期准备

详细可见VS2010 使用TeeChart画图控件 - 之中的一个 控件和类的导入

1. 1 加入TeeChart控件,给控件加入变量m_TeeChart

加入TeeChart控件,右击控件,选择加入变量,vs会自己主动给我们引入CTchart1这个类,可是仅仅有这个类,我们是远远不够的,须要加入teechart其它相关的类,加入方法在之前已经讲过,不再反复。

1.2. 引入必要的头文件

事实上之前的方法比較麻烦,更简单就是通过类向导,导入类型库的类

如图进入类向导,选择加入类button的下拉菜单,选择类型库中的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<m_TeeChart.get_SeriesCount();i++)

{

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

}

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

void CTChartDlg::ClearAllSeries(void)

{

for(long i = 0;i<m_TeeChart.get_SeriesCount();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<nDATALENGTH;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<nDATALENGTH;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<nDATALENGTH;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<nDATALENGTH;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<nDATALENGTH;i++)

{

dtemp = i;

SafeArrayPutElement(psax,&i,&dtemp);

dtemp = dData[i];

SafeArrayPutElement(psay,&i,&dtemp);

//更简单写法

//SafeArrayPutElement(psay,&i,dData+i);

}

//開始绘图

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

lineSeries.Clear();

lineSeries.AddArray(nDATALENGTH,vAY,vAX);

方法2:

这时我看TeeChart官方实例找到的方法,相对简单点

COleSafeArray XValues;

COleSafeArray YValues;

DWORD numElements[] = {nDATALENGTH};

// 创建安全数组

XValues.Create(VT_R8, 1, numElements);

YValues.Create(VT_R8, 1, numElements);

// 初始化

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_TeeChart.Series(0);

lineSeries.Clear();

lineSeries.AddArray(nDATALENGTH,YValues,XValues);

2.3 去除/显示legend

假设不想要右边那一栏数据显示,能够通过代码去除

CLegend是用来控制这个显示的

CLegend legend = (CLegend)m_TeeChart.get_Legend();

legend.put_Visible(FALSE);

能够用一个check控件控制器显示状态

加入单选控件   ,id为IDC_CHECK_ShowLegend,

单击响应

void CTChartDlg::OnBnClickedCheck_ShowLegend()

{

CLegend legend = (CLegend)m_TeeChart.get_Legend();

if(BST_CHECKED == ((CButton*)GetDlgItem(IDC_CHECK_ShowLegend))->GetCheck())

{

legend.put_Visible(TRUE);

}

else

{

legend.put_Visible(FALSE);

}

}

效果:

不用代码的话能够通过设置控件属性

明显,这没有代码灵活

2.4 改变线图颜色

默认设置是红,我要设置成其它颜色能够用put_Colour

如上代码的lineSeries最后加一个,就会变成RGB(255,0,255)的颜色了

lineSeries.put_Color(RGB(255,0,255));

效果:

3. teechart 绘图 -  柱状图

3.1  加入柱状图

这时会多一个图形

注意这里默认是绿色的,等下会发现画出来的不一样

3.2 AddXY

方法和线图没什么差别,直接上码:

const UINT nDATALENGTH = 20;

double dData[nDATALENGTH];

for (int i=0;i<nDATALENGTH;i++)

{

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

}

//

ClearAllSeries();

CSeries barSeries = (CSeries)m_TeeChart.Series(1);

for(int i=0;i<nDATALENGTH;i++)

{

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

}

注意不是Series(0)了

我擦~那效果

加个abs,好看非常多~~

3.3 改变柱状图的颜色

为啥是黑色的?设置了绿色的,我一開始也以为坑爹的设置没实用,后来研究了一下发现时AddXY的第四个參数起作用的

上面的图我们是这样加的

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

第四个參数0就相当于RGB(0,0,0),这第四个參数就是设置颜色的了

把程序稍作改动

for(int i=0;i<nDATALENGTH;i++)

{

i%2== 0

? barSeries.AddXY((double)i,dData[i],NULL,RGB(255,255,0))

: barSeries.AddXY((double)i,dData[i],NULL,RGB(0,255,255));

}

牛x

3.4 去除/显示 数据标示

好吧又遇到问题了,去掉上面的标示

ok,那个标示是用CMarks管理的,增加这个类即可了,用类向导,增加CMarks

#include "CMarks.h"

加入单选控件  IDC_CHECK_Marks

void CTChartDlg::OnBnClickedCheckMarks()

{

CSeries barSeries = (CSeries)m_TeeChart.Series(1);

CMarks SeriesMarks = (CMarks)barSeries.get_Marks();

if(BST_CHECKED == ((CButton*)GetDlgItem(IDC_CHECK_Marks))->GetCheck())

{

SeriesMarks.put_Visible(TRUE);

}

else

{

SeriesMarks.put_Visible(FALSE);

}

}

效果:

3.5 AddArray 给柱状图加入数据

和line一样

const UINT nDATALENGTH = 20;

double dData[nDATALENGTH];

for (int i=0;i<nDATALENGTH;i++)

{

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

}

COleSafeArray XValues;

COleSafeArray YValues;

DWORD numElements[] = {nDATALENGTH};

// 创建安全数组

XValues.Create(VT_R8, 1, numElements);

YValues.Create(VT_R8, 1, numElements);

// 初始化

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);

};

//

ClearAllSeries();

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

lineSeries.AddArray(nDATALENGTH,YValues,XValues);

这时出现的图像就是默认的颜色了

想改颜色!没问题,还是用put_Color

barSeries.put_Color(RGB(255,0,0));

时间: 2024-10-13 11:51:28

VS2010 使用TeeChart画图控件 - 之二 - 绘制图形(折线图,柱状图)的相关文章

TeeChart绘图控件 开发技术

C++ GUI 绘图控件目录 MFC VS2010 使用TeeChart绘图控件 - 之一 - 控件和类的导入 VS2010 使用TeeChart绘图控件 - 之二 - 绘制图形(折线图,柱状图) TeeChart绘图控件 - 之三 - 提高绘图的效率 MFC下好用的高速绘图控件-(Hight-Speed Charting) 绘制动态曲线 Qt qt超强精美绘图控件 - QCustomPlot一览 qt超强绘图控件qwt - 安装及配置 TeeChart是个很强大的控件,其绘图能力之强,其他控件

GUI创建各常用控件(二)

继续接着上一篇! 在我看来有一点需要申明:由于是GUI的相关知识,所以我只是在复习中粗略的总结而已,因此参考价值可能有限,更多的是当作自己学习的一个记录以及便于自己查阅. 好啦!干货继续: 1.类似于GUI.Box(new Rect(Screen.width/2,Screen.height/2,Screen.width/2,Screen.height/2),   new GUIContent("This is a title","hahaha"));的命令:   其

vs2010中的ADO控件及绑定控件

要在项目中添加某一个ActiveX控件,则该ActiveX控件必须要注册.由于VS2010中,并没有自动注册ADO及ADO数据绑定控件(Microsoft ADO Data Control,Microsoft DataCombo等),参考http://msdn.microsoft.com/zh-cn/library/dsb06ab6(v=vs.100).aspx 故没法在插入ActiveX控件对话框中找到它们. 若要在VS2010中获得这种控件,需要另外下载然后注册,或者利用以前的VS版本获得.

DevExpress控件的安装及画图控件的使用

近期须要绘制纵断面图,而AE自带的又不是非常好,查找资料后使用DevExpress控件中的画图控件实现了纵断面的绘制.Dev控件是须要付费的.这里我们使用破解版的哈. 安装包及破解文件上传至我的网盘了,须要的可去下载: DevExpress 11.1.4:http://pan.baidu.com/s/1qWNitsC DevExpress 13.1.5:http://pan.baidu.com/s/1bnnGWH5 安装及破解方法:http://www.it165.net/pro/html/20

对百度WebUploader开源上传控件的二次封装,精简前端代码(两句代码搞定上传)

首先声明一下,我这个是对WebUploader开源上传控件的二次封装,底层还是WebUploader实现的,只是为了更简洁的使用他而已. 下面先介绍一下WebUploader 简介: WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流IE浏览器,沿用原来的FLASH运行时,兼容IE6+,iOS 6+, android 4+.两套运行时,同样的调用方式,可供

C#:ZedGraph画图控件(待补充)

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86

怎样在VS2013/MFC中使用TeeChart绘图控件

TeeChart作为一款强大好用的绘图控件,通过它可以绘制出各式各样的图表,包括2D的,还有3D的,绘制的图表美观实用,这里主要讲述如何在VS2013/MFC中使用TeeChart控件,顺便说一下在VS2013中如何创建MFC项目. 工具/原料 Visual studio 2013 TeeChart.pro.v5.ActiveX 方法/步骤 1 在网上下载TeeChart控件并安装,安装自然不用多说,安装完后找到安装路径(带有TeeChart5.ocx文件),复制当前路径 2 安装完后需要对控件

GUI 控件实例学习二(C#)

using UnityEngine; using System.Collections; public class GUITest : MonoBehaviour { public GUISkin myGUISking; private Rect windowRect; private Vector2 scrollPosition; string info=" 测试测试测试测试测试测试测试测试测试测试 \n " + "测试测试测试测试测试测试测试测试\n测试测试测试测试测试测

13.MFC控件(二)

一.列表控件 1. 相关类 CListCtrl - 父类是CWnd类,控件类,常用于对话框程序中. CListView - 父类是CCtrlView类,视图类,常用于文档视图应用程序中. 通过调用GetListCtrl()函数得到视图客户区的控件,通过CListCtrl类完成相关功能. 列表控件有4中不同的显示风格:图标.小图标.列表.报表(详细信息). 2. CListCtrl类的使用 2.1 设置控件的图标列表(图标列表.小图标列表) (1)添加与图标列表关联的位图 (2)创建图标列表 CI