Teechart隐藏曲线

来源:互联网 发布:sql to_char 什么 要 编辑:程序博客网 时间:2024/06/05 04:53

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

至此,已经完成了所有的隐藏曲线操作了,自己去试试吧。

阅读全文
1 0