Teechart隱藏曲線

Teechart隱藏曲線

最近老大要我寫一個上位機。。。雖然我是個單片機軟件工程師,但誰叫我是新人呢,硬着頭皮上吧。

上位機有個很重要的功能就是顯示曲線,但是我們不可能爲每一條曲線創建一個窗口,因此需要將多條曲線置於一個窗口內。但在有些時候我們又不需要觀測某些曲線,這時我們就需要隱藏曲線這個功能。然而查閱大量資料我也沒找到 teechart 有hide() , show() 這種類似的功能,那我只能另闢蹊徑了。

先來看一下效果圖

這裏寫圖片描述

一開始我的想法是點擊隱藏後將改變曲線顏色使其與背景色一致,但是這種方法有一個很致命的bug。舉個例子,如果想要隱藏的曲線是最後繪製的那條曲線,而這條曲線又正好與上一條曲線數據相同,由於需要隱藏的曲線最後繪製,那麼它將會覆蓋掉上一條曲線,因爲這條曲線被繪製成了背景色,這樣的結果就是兩條曲線都被隱藏,該方案pass。

正當一籌莫展的時候,我發現了 clear 這個函數。於是我採用了點擊隱藏則清除曲線,顯示曲線則重繪曲線的方式。

採用這種方式首先需要一個地方保存數據,這裏使用 COleSafeArray 數組類來存儲數據,先定義兩個數組和一個顯示標誌位

COleSafeArray XValues;//存儲橫座標
COleSafeArray YValues1;//存儲縱座標
bool m_IsDisplay;//顯示曲線標誌位
long count;//數據個數

然後再初始化函數OnInitDialog中創建它們並將複選框置於選中狀態

DWORD numElements[] = {1};
XValues.Create(VT_R8,1,numElements);//初始化COleSafeArray數組
YValues1.Create(VT_R8,1,numElements);
m_IsDisplay = true;
m_CurveDisplay1.SetCheck(m_IsDisplay);//將複選框置於選中狀態
count = 0;//計數清零

定義一個定時器,在OnTimer函數中添加數據

double temp;

temp = count;
XValues.ResizeOneDim(XValues.GetOneDimSize() + 1);//重定義數組大小
XValues.PutElement(&count,temp);//數組中放入數據

temp = rand();//生成隨機數
YValues1.ResizeOneDim(YValues1.GetOneDimSize() + 1);//重定義數組大小
YValues1.PutElement(&count,temp);//數組中放入數據

count++;

最後在複選框 Check Box 事件處理函數中添加對曲線的相關操作

m_IsDisplay = !m_IsDisplay;
if(m_IsDisplay)
{
    m_chart.Series(0).AddArray(count,YValues1,XValues);
}
else
{
    m_chart.Series(0).Clear();
}

注意,沒有改進過的teechart無法像我一樣連續使用函數,請參考http://download.csdn.net/detail/hjq_19881123/8658405

至此,已經完成了所有的隱藏曲線操作了,自己去試試吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章