APP下载

基于多级链表实现MiniGUI属性页控件设计

2011-03-06

通信技术 2011年7期
关键词:链表数据结构控件

邹 瑛

(四川司法警官职业学院 司法信息管理系,四川 德阳 618000)

0 引言

MiniGUI 是一种面向嵌入式或实时系统图形用户界面支持系统[1],可以运行在任何POSIX 兼容平台上,是一种面向实时嵌入式系统的轻量级图形界面支持系统, 具有小巧、高效、可移植性好等特点[2]。

在嵌入式Linux下使用有时需要使用自定义的键盘对分页内子控件的键盘聚焦消息的处理不灵活,对于要求精美外观的GUI系统该控件就必须重新设计。对此这里设计了自定义属性页控件以满足多分页内子控件对键盘和鼠标事件的消息处理和GUI外观的重新绘制。

1 属性页控件数据结构分析

在功能上属性页支持多分页显示,每个分页按钮对应一个分页,当点击属性页上某个分页按钮,就会将当前显示分页隐藏,将当前显示分页重定向到最新点击的分页,然后再次显示当前分页以此实现分页的切换。

如图1所示,采用交叉链表设计了属性页数据结构,所有分页形成一级双向链表(横向),每个分页下还拥有子控件二级双向链表(纵向)。默认第一个分页为活动分页,其它分页为隐藏状态,当调用消息接口发送切换分页的消息后,控件将把当前分页全部子控件(按子控件链表遍历)隐藏,然后把要切换的目标分页全部子控件显示出来,并更改目标分页索引为当前活动分页索引。其结构体代码实现如下:

图1 属性页数据结构示意

2 属性页控件消息接口定义

属性页数据结构的定义是为更好的管理其子控件和绘制控件外观,都在内部使用,无需公布给用户,所以该结构体定义可以放入控件实现头文件PageControl_impl.h中,因此该消息接口定义可以放在PageControl.h文件中,控件的实现代码PageControl.c中包含以上两个头文件,但用户只需包含PageControl.h头文件即可使用该控件。如下是公布在PageControl.h头文件的主要接口消息定义:

通过以上消息接口,即可将随时把一些控件添加到一个新的分页去显示,也可以随时销毁一个分页。

3 属性页控件消息处理流程

定义好属性页控件的数据结构后,需要分析其控件实现的消息处理流程才能定义其需要公布的消息处理接口[3]。如图2所示,属性页控件在创建时先要处理MSG_CREATE消息,先创建控件结构体变量pData,把该结构体变量地址记录到控件的附加数据成员pCtrl->dwAddData2里,就可以从pCtrl->dwAddData2中得到其指针[4];控件在初始化时调用函数GetWindowStyle(hwnd)来获取该控件的类型风格(dwStyle)。为了提高绘图性能一般在非MSG_PAINT消息的处理中,可以直接调用GetClientDC获取属性页控件HDC句柄,把有变化的区域进行绘制。当属性页控件被弹出窗口遮挡、其它消息中调用InvalidateRect函数或控件初始化时系统会发给该属性页控件一个MSG_PAINT消息[5],此时需要全面绘制。

图2 属性页控件消息处理流程

4 结语

文本使用交叉链表设计并实现了自定义属性页控件。将内部数据结构和外部消息接口分开,方便用户使用。为了提高绘图性能尽可能减少使用InvalidateRect函数产生MSG_PAINT消息,实现局部变化局部处理,这样不但可以增加控件外观的精美显示,也不降低控件的性能。

[1] 北京飞漫软件技术有限公司.MiniGUI 编程指南[EB/OL].(2003-10-03)[2011-02-13].http://read.pudn.com/downloads160/sourcecode/embed/720762/编程指南.pdf.

[2] 北京飞漫软件技术有限公司.MiniGUI 用户手册[EB/OL].(2003-10-11)[2011-02-13].http://read.pudn.com/downloads143/doc/622754/MiniGUIV2.0.pdf.

[3] 陈周国,王胜银,付国晴.基于Linux QT技术的远程监控GUI设计[J].通信技术,2009,42(12):234-236.

[4] 王文启,韩秀玲,孙波.基于MiniGUI的多进程图形用户界面的研究[J].微计算机信息, 2007,23(08):78-80.

[5] 王蕾,陈功新,陆玲,等.基于ARM-Linux的嵌入式系统GUI开发研究[J].微计算机信息,2009,23(29):122-124.

猜你喜欢

链表数据结构控件
数据结构线上线下混合教学模式探讨
基于.net的用户定义验证控件的应用分析
为什么会有“数据结构”?
基于二进制链表的粗糙集属性约简
跟麦咭学编程
关于.net控件数组的探讨
基于MTF规则的非阻塞自组织链表
C++的基于函数模板实现单向链表
高职高专数据结构教学改革探讨
CDIO模式在民办院校数据结构课程实践教学中的应用