轉(zhuǎn)帖|其它|編輯:郝浩|2010-08-09 10:48:42.000|閱讀 1781 次
概述:由于前段時(shí)間在實(shí)現(xiàn)一個(gè)項(xiàng)目中需要進(jìn)行很多的歷史信息的統(tǒng)計(jì),尤其在曲線(xiàn)分析的功能設(shè)計(jì)的時(shí)候,客戶(hù)對(duì)這塊的功能要求多,需要能夠?qū)v史記錄的點(diǎn)的信息進(jìn)行多時(shí)段的查詢(xún)且需要對(duì)局部進(jìn)行分析,在綜合了很多曲線(xiàn)控件和一些別的實(shí)現(xiàn)方法后,決定采用TeeChart控件實(shí)現(xiàn).在搜索了網(wǎng)絡(luò)上面關(guān)于這個(gè)控件VC環(huán)境使用的方法后沒(méi)有發(fā)現(xiàn)一個(gè)完整的控件使用工程,于是在配合幫助文檔和網(wǎng)絡(luò)信息后完成了曲線(xiàn)分析的開(kāi)發(fā),現(xiàn)將開(kāi)發(fā)經(jīng)驗(yàn)分享如下:希望對(duì)那些尋求相關(guān)信息的人有幫助。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門(mén)軟控件火熱銷(xiāo)售中 >>
介紹
TeeChart Pro是一款提供上百種2D和3D圖形風(fēng)格、40種數(shù)學(xué)和統(tǒng)計(jì)功能、加上無(wú)限制的軸和22種調(diào)色板組件供選擇。提供上百種2D和3D圖形風(fēng)格、40種數(shù)學(xué)和統(tǒng)計(jì)功能、加上無(wú)限制的軸和22種調(diào)色板組件供您選擇。提供上百種2D和3D圖形風(fēng)格、40種數(shù)學(xué)和統(tǒng)計(jì)功能、加上無(wú)限制的軸和22種調(diào)色板組件供選擇,TeeChart還包括一個(gè)強(qiáng)大的、完整的編輯對(duì)話(huà)框,幾乎可用于每個(gè)組件和子組件,允許你快速的設(shè)計(jì)復(fù)雜圖表應(yīng)用程序。圖表編輯器通過(guò)TeeCommander組件進(jìn)一步得到增強(qiáng),它提供一次點(diǎn)擊訪(fǎng)問(wèn)圖表編輯器和共同特征。
正文
由于前段時(shí)間在實(shí)現(xiàn)一個(gè)項(xiàng)目中需要進(jìn)行很多的歷史信息的統(tǒng)計(jì),尤其在曲線(xiàn)分析的功能設(shè)計(jì)的時(shí)候,客戶(hù)對(duì)這塊的功能要求多,需要能夠?qū)v史記錄的點(diǎn)的信息進(jìn)行多時(shí)段的查詢(xún).(歷史記錄信息采取1分鐘保存一個(gè)點(diǎn)的方法),且需要對(duì)局部進(jìn)行分析,在綜合了很多曲線(xiàn)控件和一些別的實(shí)現(xiàn)方法后,決定采用TeeChart控件實(shí)現(xiàn).在搜索了網(wǎng)絡(luò)上面關(guān)于這個(gè)控件VC環(huán)境使用的方法后沒(méi)有發(fā)現(xiàn)一個(gè)完整的控件使用工程,于是在配合幫助文檔和網(wǎng)絡(luò)信息后完成了曲線(xiàn)分析的開(kāi)發(fā),現(xiàn)將開(kāi)發(fā)經(jīng)驗(yàn)分享如下:希望對(duì)那些尋求相關(guān)信息的人有幫助。
首先啟動(dòng)VC建立一個(gè)基于對(duì)話(huà)框程序的工程(如果建立SDI工程也可以,不過(guò)要對(duì)控件進(jìn)行動(dòng)態(tài)創(chuàng)建等工作實(shí)在太麻煩了),然后Insert ActiveX Controls->選擇TeeChart控件加入到工程中間.然后通過(guò)classWizard定義控件變量.這時(shí)編譯器會(huì)自動(dòng)加載一系列的控件相關(guān)的類(lèi)到程序中間來(lái).
然后打開(kāi)曲線(xiàn)配置屬性,在Series屬性頁(yè)加入兩條fastline曲線(xiàn)(見(jiàn)下圖)
定位到Tools屬性頁(yè),加入一些相關(guān)的Tools(見(jiàn)下圖)
準(zhǔn)備工作完成了,我們現(xiàn)在開(kāi)始編寫(xiě)加入程序數(shù)據(jù)方法編程了,這里采用加入隨機(jī)數(shù)的方法(0-300的隨機(jī)數(shù))
#define GetRandom( min, max ) ((rand() % (int)(((max)+1) - (min))) + (min))
這里在初始化曲線(xiàn)的時(shí)候就采用控件的AddXY接口加入了1440個(gè)點(diǎn)的隨機(jī)數(shù),這里采用的條件為歷史為一天,且當(dāng)天一分鐘保存一個(gè)歷史點(diǎn)信息,全天的歷史點(diǎn)為(60*24 = 1440),我們可以在調(diào)用的時(shí)候根據(jù)調(diào)用的時(shí)間間隔長(zhǎng)短進(jìn)行動(dòng)態(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);
}
至此,編譯運(yùn)行就可以看到我們的曲線(xiàn)了.但是曲線(xiàn)在運(yùn)行的時(shí)候我們雖然能夠看到曲線(xiàn)的信息,但是如果我們鼠標(biāo)在曲線(xiàn)上面移動(dòng)的時(shí)候不能動(dòng)態(tài)顯示鼠標(biāo)當(dāng)前位置的數(shù)據(jù)值,由于我們?cè)赥ools中加入了Annotation工具,在這里我們OnMouseMoveTchartPlan消息來(lái)實(shí)現(xiàn)鼠標(biāo)移動(dòng)的時(shí)候數(shù)據(jù)變化的顯示.
我們?cè)贖中加入定義:
void OnMouseMoveTchartPlan(long Shift, long X, long Y);
DECLARE_EVENTSINK_MAP()
在實(shí)現(xiàn)中加入:
BEGIN_EVENTSINK_MAP(CTestTeeChartDlg, CDialog)
ON_EVENT(CTestTeeChartDlg, IDC_TCHART1, 20, OnMouseMoveTchartPlan, VTS_I4 VTS_I4 VTS_I4)
END_EVENTSINK_MAP()
實(shí)現(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("時(shí)間: %s 功率(P): %4.2f kW 功率(Q): %4.2f kW",csLabel, xFacY, xPlanY);
ant.SetText(stmep);
}
程序的運(yùn)行功能見(jiàn)下:
一:
二:
三:
綜述
這里簡(jiǎn)單介紹了TeeChart控件在VC環(huán)境中實(shí)現(xiàn)曲線(xiàn)分析的一種簡(jiǎn)單的方法,當(dāng)然該控件還提供了十分豐富的接口給我們完成非常多的功能。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@ke049m.cn
文章轉(zhuǎn)載自:網(wǎng)絡(luò)轉(zhuǎn)載