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);// 将左侧的曲线移出界面
}
这样就可以实现数据曲线动态显示