MFC中利用Teechart控件做实时动态曲线

本文介绍Teechart绘图软件,重点讲述在工程中添加Teechart控件的方法,包括插入控件、属性设置,为控件添加TypeLib的mfc类,将控件与对象关联并去掉默认初始化,还涉及图表初始化设置和用定时器实现数据动态显示。

Teechart是个很强大的绘图软件,在我的项目中只用到了快速绘图功能(fast line)

一、Teechart软件下载安装    下载地址:https://download.youkuaiyun.com/download/weixin_45081534/11245460 

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

加入方法有如下几种:

以下参考 :https://blog.youkuaiyun.com/czyt1988/article/details/7428415

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

以上参考:https://blog.youkuaiyun.com/czyt1988/article/details/7428415 

4、初始化设置图表 

BOOL CTestDlg::OnInitDialog()
{
 CDialog::OnInitDialog();

  int  dData = 0;  //纵坐标初始化为0

 CSeries lineVd = (CSeries)m_Chart.Series(0);
    lineVd.Clear();
    for(int i=0;i<1000;i++) //将数组中的每一点画出来。
    { 
       lineVd.AddXY((double)i,dData,NULL,0); 
    }

 5、定时器实现数据动态显示

oid CTestDlg::OnTimer(UINT nIDEvent)
{
 if (ID_TIMER_SHOWCNT==nIDEvent)
 {
  ShowCnt();
 }
 
 CDialog::OnTimer(nIDEvent);
 // TODO: Add your message handler code here and/or call default
 //顺序是-先获得线 - 获得坐标系列 - 获得具体坐标
 CSeries lineVd=(CSeries)m_Chart.Series(0);//添加Vd曲线
    lineVd.Add(m_Vd,_T(""),1);//m_Vd是由下位机传上来的实时数据
 CAxes chartaxis=(CAxes)m_Chart.get_Axis();//设置横轴滚动
    CAxis chartaxisbottom=(CAxis)chartaxis.get_Bottom();
    chartaxisbottom.Scroll(1.0,TRUE);//  将左侧的曲线移出界面
}

这样就可以实现数据曲线动态显示

 

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值