TeeChart 联系客服

发布时间 : 星期五 文章TeeChart更新完毕开始阅读4ab20b08b90d6c85ec3ac6d8

2.2 AddArray函数-真正实现快速画图函数

为了验证AddArray的快速性, 添加了一个按钮:

按钮依然实现画图,不过是用AddArray函数 利用COleSafeArray实现数据存储 实现代码如下:

void CTeeChartDlg::OnBnClickedButtondraw2() {

CSeriesChartSpeed = (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;

COleSafeArrayXValues; COleSafeArrayYValues;

DWORD pNumElements[] = {m_nPointNum}; XValues.Create(VT_R8, 1, pNumElements); YValues.Create(VT_R8, 1, pNumElements); for(i=0; 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); }

效果如何? 看图

快30倍,1638400个点瞬间完成

一般我们的数据经常是用double数组保存的,很少用COleSafeArray所以,为了方便,可以写一个函数方便画图 如下:

void DrawLine(double* pX,double* pY,long nNum) {

COleSafeArrayXValues; COleSafeArrayYValues; long i(0);

DWORD wLength = nNum;

XValues.Create(VT_R8, 1, &wLength); YValues.Create(VT_R8, 1, &wLength);

for(i=0; 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); }

调用时只要把数组的首地址和长度传进去就行了。

1. 1 添加TeeChart控件,给控件添加变量m_TeeChart

添加TeeChart控件,右击控件,选择添加变量,vs会自动给我们引入CTchart1这个类,但是只有这个类,我们是远远不够的,需要添加teechart其他相关的类,添加方法在之前已经讲过,不再重复。

1.2. 引入必要的头文件