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