一、简单应用:
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);
}
四、