轉帖|其它|編輯:郝浩|2010-10-14 16:11:25.000|閱讀 3393 次
概述:這里簡單介紹了TeeChart控件在VC環(huán)境中實現(xiàn)曲線分析的一種簡單的方法,當然該控件還提供了十分豐富的接口給我們完成非常多的功能.
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
介紹
TeeChart Pro是一款提供上百種2D和3D圖形風格、40種數(shù)學和統(tǒng)計功能、加上無限制的軸和22種調色板組件供選擇。提供上百種2D和3D圖形風格、40種數(shù)學和統(tǒng)計功能、加上無限制的軸和22種調色板組件供您選擇。提供上百種2D和3D圖形風格、40種數(shù)學和統(tǒng)計功能、加上無限制的軸和22種調色板組件供選擇,TeeChart還包括一個強大的、完整的編輯對話框,幾乎可用于每個組件和子組件,允許你快速的設計復雜圖表應用程序。圖表編輯器通過TeeCommander組件進一步得到增強,它提供一次點擊訪問圖表編輯器和共同特征。
正文
由于前段時間在實現(xiàn)一個項目中需要進行很多的歷史信息的統(tǒng)計,尤其在曲線分析的功能設計的時候,客戶對這塊的功能要求多,需要能夠對歷史記錄的點的信息進行多時段的查詢.(歷史記錄信息采取1分鐘保存一個點的方法),且需要對局部進行分析,在綜合了很多曲線控件和一些別的實現(xiàn)方法后,決定采用TeeChart控件實現(xiàn).在搜索了網(wǎng)絡上面關于這個控件VC環(huán)境使用的方法后沒有發(fā)現(xiàn)一個完整的控件使用工程,于是在配合幫助文檔和網(wǎng)絡信息后完成了曲線分析的開發(fā),現(xiàn)將開發(fā)經(jīng)驗分享如下:希望對那些尋求相關信息的人有幫助
首先啟動VC建立一個基于對話框程序的工程(如果建立SDI工程也可以,不過要對控件進行動態(tài)創(chuàng)建等工作實在太麻煩了),然后Insert ActiveX Controls->選擇TeeChart控件加入到工程中間.然后通過classWizard定義控件變量.這時編譯器會自動加載一系列的控件相關的類到程序中間來.
然后打開曲線配置屬性,在Series屬性頁加入兩條fastline曲線(見下圖)
定位到Tools屬性頁,加入一些相關的Tools(見下圖)
準備工作完成了,我們現(xiàn)在開始編寫加入程序數(shù)據(jù)方法編程了,這里采用加入隨機數(shù)的方法(0-300的隨機數(shù))
#define GetRandom( min, max ) ((rand() % (int)(((max)+1) - (min))) + (min))
這里在初始化曲線的時候就采用控件的AddXY接口加入了1440個點的隨機數(shù),這里采用的條件為歷史為一天,且當天一分鐘保存一個歷史點信息,全天的歷史點為(60*24 = 1440),我們可以在調用的時候根據(jù)調用的時間間隔長短進行動態(tài)的修改
void CTestTeeChartDlg::InitChart()
{
m_ctrlChart.Series(0).Clear();
m_ctrlChart.Series(1).Clear();
m_ctrlChart.GetPage().SetMaxPointsPerPage(1440);
COleDateTime CurTime = COleDateTime::GetCurrentTime();
COleDateTime tempTime ;
tempTime = CurTime;
CurTime.SetTime(0,0,0);
CurTime.SetDate(tempTime.GetYear(),tempTime.GetMonth(),tempTime.GetDay());
COleDateTimeSpan tmSpan = COleDateTimeSpan(0,0,1,0);
CString csTime ;
for(int i=0; i<1440; i++)
{
csTime = CurTime.Format("%H:%M");
float fzVal = float(GetRandom(12000,28000)/100);
m_ctrlChart.Series(0).AddXY(i,fzVal,csTime,i);
fzVal = float(GetRandom(15000,25000)/100);
m_ctrlChart.Series(1).AddXY(i,fzVal,csTime,i);
CurTime += tmSpan;
}
m_ctrlChart.GetAxis().GetLeft().SetMinMax(100, 300);
}
至此,編譯運行就可以看到我們的曲線了.但是曲線在運行的時候我們雖然能夠看到曲線的信息,但是如果我們鼠標在曲線上面移動的時候不能動態(tài)顯示鼠標當前位置的數(shù)據(jù)值,由于我們在Tools中加入了Annotation工具,在這里我們OnMouseMoveTchartPlan消息來實現(xiàn)鼠標移動的時候數(shù)據(jù)變化的顯示.
我們在H中加入定義:
void OnMouseMoveTchartPlan(long Shift, long X, long Y);
DECLARE_EVENTSINK_MAP()
在實現(xiàn)中加入:
BEGIN_EVENTSINK_MAP(CTestTeeChartDlg, CDialog)
ON_EVENT(CTestTeeChartDlg, IDC_TCHART1, 20, OnMouseMoveTchartPlan, VTS_I4 VTS_I4 VTS_I4)
END_EVENTSINK_MAP()
實現(xiàn)體:
void CTestTeeChartDlg::OnMouseMoveTchartPlan(long Shift, long X, long Y)
{
int nP = -1;
double xValue = m_ctrlChart.Series(0).XScreenToValue(X) + 0.5;
nP = (int)(xValue);
if(nP < 0)
{
return ;
}
CValueList xList = m_ctrlChart.Series(0).GetXValues();
CValueList yList = m_ctrlChart.Series(0).GetYValues();
CValueList yPlanList = m_ctrlChart.Series(1).GetYValues();
CString csLabel = m_ctrlChart.Series(0).GetPointLabel(nP);
double xV = xList.GetValue(nP);
double xFacY = yList.GetValue(nP);
double xPlanY = yPlanList.GetValue(nP);
CToolList tlist = m_ctrlChart.GetTools();
CTools tools = tlist.GetItems(1);
CAnnotationTool ant = tools.GetAsAnnotation();
CString stmep;
stmep.Format("時間: %s 功率(P): %4.2f kW 功率(Q): %4.2f kW",csLabel, xFacY, xPlanY);
ant.SetText(stmep);
}
程序的運行功能見下:
一:
二:
三:
綜述:
這里簡單介紹了TeeChart控件在VC環(huán)境中實現(xiàn)曲線分析的一種簡單的方法,當然該控件還提供了十分豐富的接口給我們完成非常多的功能.
慧都2010促銷季開幕,TeeChart for .NET 8折促銷!詳情咨詢:400-700-1020或023-66090381活動詳情://ke049m.cn/zh-CN/Products_cn/TeeChart_chinese.html
本站文章除注明轉載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@ke049m.cn
文章轉載自:網(wǎng)絡轉載