一种多组数据控件显示方法

2018-04-26 08:51中国电波传播研究所杨丽丽
电子世界 2018年7期
关键词:链表赋值控件

中国电波传播研究所 王 平 杨丽丽

1.引言

对某些采集设备而言,在相同条件下,同时显示几组的数据功能要求越来越多。为了研究设备性能,有时需要对关心的区域进行重点显示研究。这对显示控件提出了更高的要求。

本文提供一种多组数据的绘制方法,采用自定义数据链表存储显示数据,既可以实时加载显示数据,又可回放历史数据,可鼠标选择放大,鼠标滑动时也可显示当前鼠标点数据,显示效率高,可行性强,取得了理想效果。

2.缓冲区定义[1]

本显示控件采用动态链表。动态链表的结构定义如下:

其中showdataarr是某时刻的组数据,如果要显示nSize组数据,那么showdataarr 就是nSize维数组;obtime代表时间。obDATALIST数据按一定的时间间隔加载到数据列表showdataList中。

实时数据加载到链表后,触发绘图消息;在绘图消息中处理数组数据链表,进行各个组的坐标转化,实现绘图更新。

本方法采用内存绘图,降低绘图闪烁。

3.数据加载

定义obDATALISTITEM类型的结构体 showdata,初始化

obDATALISTITEM showdata;

memset(&showdata,0, sizeof(showdata));

进行时间赋值,将数据的采集时间赋给结构体

showdata.obtime = obtime;

进行显示数据赋值,对于显示的nSize组数据,先开辟内存

data. showdataarr = new double [nSize];

将当前时间获取的nSize组数据赋值到结构体的指针当中

Memcpy(data. Showdataarr,ddata,sizeof(double)* nSize);

将数据obDATALISTITEM结构体加载的缓冲链表,并随时更新链表数据中的最大最小值,便于对Y轴的显示范围进行自适应。

4.图形绘制 [2]

绘图主要工作是进行坐标转换。

对选中的显示区域,这个选中的区域,可以是正常的全部数据,也可以是用户关心的重点区域。

经过区域的坐标逆转换,计算出当前要显示的数据的索引为:

开始索引:m_nStartindex

结束索引:m_nEndindex

显示数据元素个数:nChooseSize = m_nEndindex- m_nStartindex +1;

对nSize组显示数据而言,利用for循环,根据选择的本组数据是否显示,进行nChooseSize

个数据的坐标转换并进行绘制。

nSize为显示数据的组数

nChooseSize 是每组数据的显示数据长度

对于每组显示数据,用循环代码绘图

5.局部放大

鼠标在显示区域选中某一块,可关心区域进行放大显示。本功能的关键点是坐标的逆转换。

在鼠标的OnLButtonDown函数中,获取左上边界。

在鼠标的OnLButtonUp函数中,获取右下边界。

运用坐标逆转换,获取要显示的数据索引m_nStartindex、m_nEndindex,以及纵轴坐标m_fStartY、m_fEndY。

调用绘图消息进行绘图,即可显示选中的区域。

6.数据分组选择是否显示

可以根据需要,点选需要选择某组数据,实现某些数据显示,某些数据不显示。将点选的结果,映射到BOOL型的数组m_bcheck[nSize]中,点选完毕之后,触发绘图函数,即可根据选择需要显示数据。

7.结论

本方法在VC++6.0开发环境下,进行本多功能控件的绘图实现。所绘多组数据图如图1所示:

图1 某多组数据显示控件显示效果图

由实验结果可以,本绘制方法,对多组线性数据有良好的展示效果,并可根据需要进行点选显示数据,并可对关心区域进行重点显示。

[1]严蔚敏,吴伟您.数据结构(C语言版)[M].清华大学出版社,2002∶44-63.

[2]孙鑫,等.VC++6.0深入详解[M].电子工业出版社,2001∶404-434.

猜你喜欢
链表赋值控件
L-代数上的赋值
基于二进制链表的粗糙集属性约简
跟麦咭学编程
强赋值幺半群上的加权Mealy机与加权Moore机的关系*
关于.net控件数组的探讨
基于链表多分支路径树的云存储数据完整性验证机制
利用赋值法解决抽象函数相关问题オ
ASP.NET服务器端验证控件的使用
链表方式集中器抄表的设计
P2×Cn的友好标号集