MFC下绘制曲线工具Teechart使用
Teechart版本為TeeChart.Pro.v5.ActiveX
一、簡單應(yīng)用:
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.此處實際上已經(jīng)添加了一個坐標軸對象,可以在程序中直接調(diào)用。其原理類似于Series。
2.??????給工程添加兩個類CAxis和CAxes。添加類的方法同添加CSeries。
3.??????思路即為對上圖中的Left和Custom進行屬性編輯。包括坐標的最大最小值,以及在Y軸上的起止位置,注意起止位置是按照百分比計算的。須特別注意曲線Series須與坐標軸綁定,put_VerticalAxisCustom(0)函數(shù)實現(xiàn)將數(shù)據(jù)綁定在Custom 0上。這樣才可以顯示曲線。(如果將對應(yīng)的坐標軸Custom設(shè)置為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的相關(guān)設(shè)置:自動大小關(guān)閉
?????? left0.put_Minimum(0);//最小值
?????? left0.put_Maximum(30);//最大值
?????? left0.put_Increment(0);//增量
?????? left0.put_StartPosition(0);//最小值開始的位置,百分比
?????? left0.put_EndPosition(50);//最大值結(jié)束的位置,百分比
?????? 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);//將數(shù)據(jù)綁定在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
?????? )
????? ?);
?????? 參數(shù)nIDEvent指定一個非零的定時器ID;參數(shù)nElapse指定間隔時間,單位為毫秒;參數(shù)lpfnTimer指定一個回調(diào)函數(shù)的地址,如果該參數(shù)為NULL,則WM_TIMER消息被發(fā)送到應(yīng)用程序的消息隊列,并被CWnd對象處理。如果此函數(shù)成功則返回一個新的定時器的ID,我們可以使用此ID通過KillTimer成員函數(shù)來銷毀該定時器,如果函數(shù)失敗則返回0。如:
SetTimer(1,frequence,NULL);//啟動Id為1的定時器,時間間隔為FreQuence。
不再使用定時器時,可以銷毀它。銷毀定時器需使用CWnd類的KillTimer成員函數(shù),如:KillTimer(1);//銷毀ID為1的定時器。
2.在菜單中添加一個“運行”的按鈕,在其響應(yīng)函數(shù)里實現(xiàn)Teechart坐標軸的初始化和啟動定時器以及其他一些初始化工作。比如計時器的計數(shù)標志csj。
void CMainFrame::OnGorun()
{
??? // TODO: 在此添加命令處理程序代碼請
??? KillTimer(1);
??? csj = 0;
? ??CAxescoordAxes = (CAxes)m_tchart.get_Axis();//提取出控件中的坐標軸
????coordAxes.put_Visible(TRUE);//顯示坐標軸
? ??coordAxes.AddCustom(FALSE);//動態(tài)添加一個Custom
? ??CAxisleftAxis = (CAxis)coordAxes.get_Custom(i);//須在控件中添加一個Custom
? ??leftAxis.put_Automatic(FALSE);//對Left Axis的相關(guān)設(shè)置:自動大小關(guān)閉
? ??leftAxis.put_Minimum(0);//最小值
????leftAxis.put_Maximum(30);//最大值
? ??leftAxis.put_Increment(0);//增量任意
? ? leftAxis.put_StartPosition(0);//最小值開始的位置,百分比
? ??leftAxis.put_EndPosition(100);//最大值結(jié)束的位置,百分比
????m_tchart.AddSeries(0);
? ??//啟動定時器
????SetTimer(1,frequence,NULL);
}
3.OnTimer毀掉函數(shù)里添加繪圖代碼:本例中編寫了一個函數(shù)。但是需注意在Ontimer下需要對csj++。
void CMainFrame::drawCurves()
{
? ? ? ? ? ?mycs?= (CSeries)m_tchart.series(0);//提取出控件中的Series i
?????????? mycs.put_VerticalAxisCustom(0);//將數(shù)據(jù)綁定在custom i上
?????????? mycs.AddXY(csj,rand()%25, NULL,RGB(255,12*i,20*i));
?}
??? CAxes coordAxesBottom = (CAxes)m_tchart.get_Axis();//設(shè)置橫軸滾動
??? CAxis bottomAxis = (CAxis)coordAxesBottom.get_Bottom();
??? bottomAxis.Scroll(1.0,TRUE);
}
四、
總結(jié)
以上是生活随笔為你收集整理的MFC下绘制曲线工具Teechart使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 教育部统考 计算机应用,9月教育部统考《
- 下一篇: 用linux集成电路版图设计,集成电路版