APP下载

基于嵌入式MINIGUI控件子类化技术的深入研究与应用

2011-01-23

中国新技术新产品 2011年3期
关键词:控件实例嵌入式

王 丹

(安徽理工大学计算机学院,安徽 淮南 232001)

基于嵌入式MINIGUI控件子类化技术的深入研究与应用

王 丹

(安徽理工大学计算机学院,安徽 淮南 232001)

文章讨论一种MINIGUI控件子类化过程中的新方法。MINIGUI是一种有效的图形用户界面,子类化是对控件类的扩展。文章中提出了一种新的对于MINIGUI中控件子类化设计过程中数据保存的方法,该方法能有效的应用到MINIGUI的软件开发中,从而提高MINIGUI系统在嵌入式应用当中的竞争力。

MINIGUI;控件;子类化;嵌入式

1 MINIGUI图形系统

MINIGUI是GUI图形界面系统中的一种,其开发的目的是为基于LINUX的实时嵌入式系统提供一个轻量级的图形用户界面支持系统。它为应用程序定义了一组轻量级的窗口和图形设备接口。利用这些接口,每个应用程序可以建立多个窗口,而且可以在这些窗口中绘制图形互不影响。用户还可以利用MINIGUI建立菜单、按钮、列表框等常见的GUI元素。利用MINIGUI足可以实现任何绚丽多姿的界面效果及交互应用。

2 控件类与控件的子类化

在MINIGUI中子类化的方法有三种:1)对已经建立的控件实例进行子类化,子类化的结果只会影响一个控件实例。2)对某个控件类进行子类化,将影响其后创建的所有该控件累的控件实例;3)在某个控件类的基础上新注册一个子类化的控件类,不会影响原有控件类。

3 传统子类化设计的不足与改进

3.1 传统设计

在MINIGUI库中的struct_MAINWIN结构中有一些两成员,如下:

MINIGUI中,dwAddData2是供控件实现中保存数据使用的,dwAddData则提供给用户再次使用。由此可以肯定我们设计子类化控件的时候,子类化控件的数据不应该保存在dwAddData2中,如果保存在dwAddData2中,预定义控件中的数据就会丢失,而我们的子类化控件是基于预定义控件类或者控件实例基础上的。为此,传统设计方法中变量dwAddData则会成为我们的选择。

3.2 传统方式的应用。

子类化控件设计的应用非常广泛,图1即通过重载已有编辑框而实现的子类化控件的应用,在该应用中传统方式设计的子类化控件得到了很好的应用,而且设计设计方法简单。

图 1

3.3 子类化设计过程中的不足与改进

3.3.1 不足。传统子类化设计满足了简单常规的应用,但是在复杂设计中,我们会遇到这样的问题,当这样的子类化控件与预定义控件进行内嵌使用时,往往会出现问题,原因就在于我们前面传统方式设计中采用了用dwAddData保存子类化中的数据。

MINIGUI在设计时采用了在struct_MAINWIN结构中定义两个附加数据变量来保存数据,其目的就是为了保证控件数据不被丢失,保证用户不会使用内部数据,从而为用户专门定义了一个变量来保存他们用到的数据。而二次开发者与应用开发者同样是MINIGUI库的使用者,从而导致了两者之间对dwAdd-Data的重复使用。

3.3.2 改进与应用。在这里我们提出一种更加有效合理的方法:在内部控件中增加一个获取内部保存在adddation2中的结构体变量大小的消息,供编写外部扩展控件时使用,另外还得再window.h中增加这个消息的定义。该消息这里定义为MSG_GETPRIVATEDATASIZE。在编写扩展控件时,MSG_CREATE消息中malloc一个指针内存,该内存大小为内部获得的结构体变量大小与扩展控件的结构体变量大小之和,将这两个结构体保存在p中,内部的在前,扩展的在后,并将p的内容保存在adddation2中,注意的是在取出原结构体变量内容后应free adddation2,再保存p的内容。当消息不是MSG_CREATE时,adddation2中取出的数据为p的内容,所以扩展控件要使用,p必须加上获取的内部结构体大小,才是扩展控件中定义的结构体的地址。

以下代码是基于spinbox子类化控件中的应用实现方法(部分代码):

结论

文章中提出的设计方法,有效的解决了多控件内嵌的问题,使开发人员可以方便的设计出令人满意的,并且完美的子类化控件。

[1]北京飞漫软件有限公司.MiniGUI编程指南[M].2006.

[2]北京飞漫软件有限公司.MINIGUI用户手册[S].2006.

[3]北京飞漫软件有限公司.MINIGUI技术白皮书[M].2006.

[4]杨宗德,邓玉春.Linux高级程序设计(第2版).北京.人民邮电出版社,2009.

TP7

A

猜你喜欢

控件实例嵌入式
搭建基于Qt的嵌入式开发平台
嵌入式软PLC在电镀生产流程控制系统中的应用
ASP.NET服务器端验证控件的使用
完形填空Ⅱ
完形填空Ⅰ
Altera加入嵌入式视觉联盟
倍福 CX8091嵌入式控制器
Spreadsheet控件在Delphi数据库系统中的编程与应用