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. 引入必要的头文件