略谈teechart

本文详细介绍了在Visual C++ (VC) 中利用第三方控件如teechart进行曲线图形显示的方法,包括注册控件、添加控件、编写关键代码以及注意事项。重点在于提供了一个从注册到绘制曲线的完整流程,并通过实例代码演示了如何高效地添加、显示和更新曲线。同时,对比了不同第三方控件的特点,帮助开发者根据需求选择合适的控件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

VC,BCB下的曲线图形显示可以自己编写代码,主要是GDI(+)的WinAPI函数,主要是MoveTo和LineTo等函数,自己编写很繁琐。

 最好是用第三方控件,当然VC高版本也提供了MsChart,很强大,本人在C#里用过,主要是C#效率不高,编写的程序太大,还是用VC了.

第三方控件有ntGraph,优点是小巧,只有几个类,缺点不能缩放等;而teechart则给出强大,但是他比较庞大,有几十个类。顺便说下BCB自带有这个控件。

使用比较简单,当然也要花几个小时功夫。讲几个需要注意的地方吧。

1.先注册, regsvr32 teechart8.ocx;再在工程添加,在对话框上右键插入teechart控件;再设置属性,添加曲线等;再添加控件变量,添加头文件

#include "tchart.h"
#include "scroll.h"
#include "Series.h"
#include "Axis.h"
#include "page.h"
#include "ValueList.h"
#include "ToolList.h"
#include "Tools.h"
#include "AnnotationTool.h"
#include "Axes.h"

2.由于添加后类比较多,可以在ClassView中新建一个文件夹存放类。

3.常用代码:

m_chart.Series(0).FillSampleValues(50);//添加sample点

m_chart.Series(0).AddXY(i,arr[i],NULL,RGB(0,0,0));//添加点,效率较低,可用AddArray函数

m_chart.Series(0).Clear();//清空曲线

m_chart.Series(i).SetActive(false);//隐藏显示曲线, true显示

void CTeeChartDlg::OnBnClickedButtondraw2()

{
    CSeries ChartSpeed = (CSeries)m_Chart.Series(0);
    UpdateData(TRUE);
    if (m_nPointNum<=0)
    {
        MessageBox(_T("数据点数不能小于0"));
        return;
    }
    DWORD dwTimeS,dwTimeE;
    CString str(_T(""));
    long i(0);
    double val;


    COleSafeArray XValues;    
    COleSafeArray YValues;
    DWORD pNumElements[] = {m_nPointNum};
    XValues.Create(VT_R8, 1, pNumElements);    
    YValues.Create(VT_R8, 1, pNumElements);
    for(i=0; i<m_nPointNum; i++) 
    {         
        val = i;
        XValues.PutElement(&i, &val);
        val = randf(-20,20);
        YValues.PutElement(&i, &val);
    };
    //由于需要计算时间,画图就不在第一个for循环里实现了
    dwTimeS = GetTickCount();
    ChartSpeed.Clear();
    ChartSpeed.AddArray(m_nPointNum,YValues,XValues);
    dwTimeE = GetTickCount();
    dwTimeE -= dwTimeS;


    str.Format(_T("耗时:%d ms"),dwTimeE);
    SetDlgItemText(IDC_STATIC_T,str);
}
void DrawLine(double* pX,double* pY,long nNum) 
{
    COleSafeArray XValues;    
    COleSafeArray YValues;
    long i(0);
    DWORD wLength = nNum;
    XValues.Create(VT_R8, 1, &wLength);    
    YValues.Create(VT_R8, 1, &wLength);


    for(i=0; i<nNum; i++) 
    {         
        XValues.PutElement(&i, pX+i);
        YValues.PutElement(&i, pY+i);
    }
    CSeries Chart = (CSeries)m_Chart.Series(0);
    Chart.Clear();
    Chart.AddArray(nNum,YValues,XValues);

}

////////////////////////////////////////////////////////////////////

 (pMsg->message == WM_KEYDOWN)  
    {  
        switch(pMsg->wParam)  
        {  
            case VK_ESCAPE: //Esc按键事件  
                return true;  
            case VK_RETURN: //Enter按键事件  
                return true;  
            default:  
                ;  
        }  

    }  

//////////////////////////////////////////////////////////////////

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值