MFC下绘制曲线工具Teechart使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bjtuwayne/article/details/70160650

MFC下绘制曲线工具Teechart使用

Teechart版本为TeeChart.Pro.v5.ActiveX

一、简单应用:

1.    安装完毕之后,给工程添加一个类,选择来自Typelib的MFC 类,选择TeeChart ActiveX Control V5和下面的ISereis。

2.    在工具箱中添加选项卡,然后右键添加项,选择TeeChart pro control V5。

3.    在界面编辑上托进去一个新建的工具。双击控件,add一个Series。

4. 右击控件,添加一个变量。在主界面的.cpp里添加#include“CSeries”,并书写画曲线代码

CSeries mycs = (CSeries)m_Chart_RCS.Series(0);

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

mycs.AddNullXY(i,2*i+10, NULL);

二、TeeChartY轴分段显示

1.      在MFC资源编辑界面中增加一个Teechart控件,添加两条Series,均为line。并在Axis页下添加一个Custom 0.此处实际上已经添加了一个坐标轴对象,可以在程序中直接调用。其原理类似于Series。


2.      给工程添加两个类CAxis和CAxes。添加类的方法同添加CSeries。

3.      思路即为对上图中的Left和Custom进行属性编辑。包括坐标的最大最小值,以及在Y轴上的起止位置,注意起止位置是按照百分比计算的。须特别注意曲线Series须与坐标轴绑定,put_VerticalAxisCustom(0)函数实现将数据绑定在Custom 0上。这样才可以显示曲线。(如果将对应的坐标轴Custom设置为disvisible,则曲线也会消失,道理很简单,没有坐标轴哪来的曲线)代码如下:

//第一个坐标空间

       CSeries mycs0 =(CSeries)m_chart_RDE.Series(0);//提取出控件中的Series0

       CAxes coord = (CAxes)m_chart_RDE.get_Axis();//提取出控件中的坐标轴

       CAxis left0 = (CAxis)coord.get_Left();//提取出坐标轴中的Left Axis

       left0.put_Automatic(FALSE);//对Left Axis的相关设置:自动大小关闭

       left0.put_Minimum(0);//最小值

       left0.put_Maximum(30);//最大值

       left0.put_Increment(0);//增量

       left0.put_StartPosition(0);//最小值开始的位置,百分比

       left0.put_EndPosition(50);//最大值结束的位置,百分比

       left0.put_PositionPercent(0);//在X轴上的偏移量

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

           mycs0.AddXY(i,i, NULL,RGB(255,0,0));

 

       //第二个坐标空间

       CSeries mycs1 =(CSeries)m_chart_RDE.Series(1);

       mycs1.put_VerticalAxisCustom(0);//将数据绑定在custom0

       CAxes coord1 =(CAxes)m_chart_RDE.get_Axis();

       CAxis left1 = (CAxis)coord1.get_Custom(0);//须在控件中添加一个Custom

       left1.put_Automatic(FALSE);

       left1.put_Minimum(0);

       left1.put_Maximum(30);

       left1.put_Increment(0);

       left1.put_StartPosition(55);

       left1.put_EndPosition(100);

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

           mycs1.AddXY(i,i, NULL,RGB(0,255,0));

效果图:


三、Teechart实时曲线绘制显示

1.MFC下添加定时器的方法:即添加OnTimer消息。定义afx_msg void OnTimer(UINT_PTR nIDEvent);以及ON_WM_TIMER。启动定时器用SetTimer:

      

UINT_PTR SetTimer(
            UINT_PTR nIDEvent,
             UINTnElapse,
             void(CALLBACK* lpfnTimer
       )(HWND,
          UINT,
          UINT_PTR,
          DWORD
       )
       );

       参数nIDEvent指定一个非零的定时器ID;参数nElapse指定间隔时间,单位为毫秒;参数lpfnTimer指定一个回调函数的地址,如果该参数为NULL,则WM_TIMER消息被发送到应用程序的消息队列,并被CWnd对象处理。如果此函数成功则返回一个新的定时器的ID,我们可以使用此ID通过KillTimer成员函数来销毁该定时器,如果函数失败则返回0。如:

SetTimer(1,frequence,NULL);//启动Id为1的定时器,时间间隔为FreQuence。

不再使用定时器时,可以销毁它。销毁定时器需使用CWnd类的KillTimer成员函数,如:KillTimer(1);//销毁ID为1的定时器。

2.在菜单中添加一个“运行”的按钮,在其响应函数里实现Teechart坐标轴的初始化和启动定时器以及其他一些初始化工作。比如计时器的计数标志csj。

void CMainFrame::OnGorun()

{

    // TODO: 在此添加命令处理程序代码请

    KillTimer(1);

    csj = 0;

    CAxescoordAxes = (CAxes)m_tchart.get_Axis();//提取出控件中的坐标轴

    coordAxes.put_Visible(TRUE);//显示坐标轴

    coordAxes.AddCustom(FALSE);//动态添加一个Custom

    CAxisleftAxis = (CAxis)coordAxes.get_Custom(i);//须在控件中添加一个Custom

    leftAxis.put_Automatic(FALSE);//对Left Axis的相关设置:自动大小关闭

    leftAxis.put_Minimum(0);//最小值

    leftAxis.put_Maximum(30);//最大值

    leftAxis.put_Increment(0);//增量任意

    leftAxis.put_StartPosition(0);//最小值开始的位置,百分比

    leftAxis.put_EndPosition(100);//最大值结束的位置,百分比

    m_tchart.AddSeries(0);

    //启动定时器

    SetTimer(1,frequence,NULL);

}

3.OnTimer毁掉函数里添加绘图代码:本例中编写了一个函数。但是需注意在Ontimer下需要对csj++。

void CMainFrame::drawCurves()

{

           mycs = (CSeries)m_tchart.series(0);//提取出控件中的Series i

           mycs.put_VerticalAxisCustom(0);//将数据绑定在custom i

           mycs.AddXY(csj,rand()%25, NULL,RGB(255,12*i,20*i));

 }

    CAxes coordAxesBottom = (CAxes)m_tchart.get_Axis();//设置横轴滚动

    CAxis bottomAxis = (CAxis)coordAxesBottom.get_Bottom();

    bottomAxis.Scroll(1.0,TRUE);

}

四、

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