一种应用于无线通讯终端中GUI模型的设计与实现

  • 格式:pdf
  • 大小:165.86 KB
  • 文档页数:3

第2 卷第l5期 

Vo1.28 NO.1 5 计算机工程与设计 

Computer Engineering and Design 2007年8月 

Aug.2007 

一种应用于无线通讯终端中GUI模型的设计与实现 

邱桔 , 何海江 , 陈姝 

(1.暨南大学珠海学院,广东珠海519070;2.湖南经济管理干部学院计算机系,湖南长沙410004; 

3.中南大学研究生学院,湖南长沙410083) 

摘 要:在进行嵌入式系统的软件设计过程中,应用层GUI的设计是一个非常重要的部分。由于实时操作系统的引入,用户 

界面的设计就从传统的顺序执行变成了以消息驱动方式进行用户界面响应。采用了OOP的思想,构建了一种适用于无线通 

讯终端系统(包括GSM通讯终端,PHS通讯终端,CDMA通讯终端)软件设计中通用的GUI模型,并给出了在C语言开发工具 

下的实现,以一个待机状态下主菜单界面讲述了模型中状态迁移的具体实现过程。该GUI模型具有结构简单,实现方便,便 于扩展等特点,目前已用于笔者开发的PHS移动终端的系统软件中,实践证明该模型使用效果良好。 

关键词:嵌入式系统;状态迁移;消息驱动;指针函数;无线通讯终端 

中图法分类号:TP31 文献标识码:A 文章编号:1000.7024(2007)15.3598.03 

Design and implementation of GUI model applied on software design of wireless 

communicate terminal system 

QIU Ju ,HE Hai-jiang ,CHEN ShC 

(1.Zhuhai College,Jinan University,Zhuhai 519070,China;2.Department ofComputer Science,Hunan Economic 

Management College,Changsha 4 1 0004,China;3.School of Graduate,Central South University, 

Changsha 4 1 0083,China) 

Abstract:Design of the application layer’S GUI is very important in software planning of an embed system.As the real time OS is in- 

troduced,the traditional mode of serious executing in designing UI(user interface)is replaced by message-droved mode.The ideal ofOOP is adopted in building a general GUI model which is applied on the software design ofwireless communicate terminal system(in- 

cluding GSM,PHS and CDMA).How tO realize this model by using C language tool,by taking main menu interface under idle state 

as an example explaining the process ofmodel state transfer is explained.This GUI model is simple,easy tO implement and extent,now it has been applied in our PHS system software for moving terminal,it runs wel1. 

Key words:embedded system;state transfer;message drive;pointer function;wireless communication terminal system 

O引 言 

在进行嵌入式系统的软件设计过程中,应用层GUI的设 计是一个非常重要的部分,因为用户与系统交互的过程是一 

种通过显示界面获得系统的当前状态及确认操作结果的过 

程,相对于传统的字符用户界面,GUI界面更直观、操作简便, 可扩展性强的特点,通过对图形控件的增减就可以快速构建 

一个新的界面;本文给出一种适用于无线通讯终端系统(包括 

GSM通讯终端,PHS通讯终端,CDMA通讯终端)软件设计中 

一种通用的GUI模型的设计方法。 

1 GUI图形控件结构设计 

在GUI模型的设计中考虑到图形接口系统可扩展性采用 图1的结构,由于嵌入式系统开发平台中一般采用C语言的 

变种作为编程工具,基本上都不支持OOP,本文设计的结构采 

用了OOP的思想,所以在实现时须考虑如何用C语言这种非 OOP编程工具来实现OOP,思路是利用C语言中的指针函数 

来实现OOP的重载及虚拟性。类Dialog是用来显示LCD中 的一屏,响应消息事件实体,由Field、Password、Pklist、Menu、 

MessageBox、FieldPb、Label控件中一个或多个组成(当然还可 

以扩展成别的控件,由用户需求确定),其结构体如下: 

typedefstruct{ 

Element element; 

Element firstChild; Element focusedElem; 

BOOLEAN bMsgboxShow; 

收稿日期:2006—08.05 E—marl:orange5460@163.tom 作者简介:邱桔(1966--),女,湖南醴陵人,博士研究生,副教授,研究方向为软件工程、嵌入式系统; 何海江(1965--),男,湖南望城人, 副教授,研究方向为数据挖掘、组件技术: 陈姝(1978--),男,湖南祁东人,博士研究生,研究方向为嵌入式系统、图形图像处理。 

_——3598・

—— 维普资讯 http://www.cqvip.com 图1 图形控件继承图 

Menu ppMenu; U1 6 BackIconId; U32 DialogState; Label leftBtn, rightBtn, midBtn; 

const IconAttrs BackupRightBtn; )Dialog; 结构体Dialog有一个结构体指针firstChild指向Dialog中 

的第一个控件,该结构体通过指针形成一个链表,通过存取结 

构体Element中的指针next,就可以顺序访问下一个控件, 

Field、Password、Pklist、Menu、MessageBox、FieldPb、Label控件均 从一个基本类Element派生出来,鉴于篇幅问题就不将Element 

结构列出,只就其一些重要的内部的成员变量及成员函数进 

行介绍: Element中的成员函数pfnUserCallback、pfnLostFocus、 

pfnHandleEvent、pfnPaint、pfnDestroy为纯虚函数,类型为函数 

指针,初始化为NULL,每个派生类必须为这些成员函数指定 

一个相应的处理函数,pfnUserCallback函数当调用该控件的状 

态须做一些特殊处理时提供,pfnLostFocus为当控件失去焦点 时调用,pfnHandleEvent为用来处理事件消息流的函数, 

pfnPaint提供绘制控件的功能,pfnDestroy是当控件消毁时调 

用;将控件的基本属性如控件的长、宽等作为基类Element的 

成员变量,对这些基本属性的说明如下:align一控件中的图标 或文字的对齐方式,分为左对齐、居中对齐、右对齐3种模式, 

frameStyle-.控件中边框模式,分为线形边框与矩形边框两种 

模式,type-_控件类型,用来标识该控件是什么样的控件:Lable 

还是Field还是Menu等,x_.控件的左上角x坐标,y__控件的 左上角Y坐标,width一控件宽度,heigh卜控件高度,bg~控件 

背景色,f 控件前景色,Focus龟一控件为焦点控件时的颜色, 

hdc__控件的画笔设备句柄,fontAttrAscii-控件中字体,Event- 

T e一该控件所能处理的事件类型,paren卜该控件对应的父 控件,nex卜该控件对应的下一个兄弟控件。 

派生类控件是将基类控件作为其结构体的成员,派生类 

初始化时将对应的处理函数的地址赋给对应的成员函数,可 

进行函数重载。 

2消息事件处理 

嵌入式系统软件中实时操作系统的引入,使得软件可实 

现的功能大大增强且便于扩展,用户界面的设计就从传统的 

顺序执行变成了以消息驱动方式进行用户界面响应。消息驱 动的实现过程大致如下:各种外设或软件实体产生消息,外设 

产生中断,实时操作系统(RTOS)响应中断,进入相应设备的中 

断处理程序处理,由中断处理程序调用系统调用产生消息,软 件实体根据需要自己调用系统调用产生消息,系统中会有一 个消息处理总进程,该进程是一个无限循环,不断等待消息到 

达,当无消息时该进程进入睡眠,有消息时由RTOS将其唤醒, 

然后根据消息不同的类型对消息进行赋值,然后传给相应的 

实体处理。 在本模型中设计了一个实体Entity用来处理RTOS传给 

GUI的消息(其结构体定义见3.1节),实体先判断该消息是否 

引起状态转换,如果没有则将消息传给Dialog进行处理,Dia— 

log先判断是否有焦点控件,有则传给焦点控件处理,没有按 

顺序传给Dialog中的控件处理,如果消息在某一控件中处理 了则直接返回,否则就传给下一顺序控件,控件按照消息类别 

分别进行处理,然后调用图形设备系统调用进行界面刷新处 

理以反映处理结果。 

3状态转换 

无线通信终端系统嵌入式软件的应用层部分一般由 

IDLE SYS、GAME、TOOL、SETTING、PROFILE、PHONEBOOK 等多个模块组成,每个模块又由多个小模块组成,我们将这样 

一些不仅显示用户界面又处理事件消息的模块称为一个状态, 

由于用户通常不是停留在一个状态下操作,而是经常在不同 

的状态下切换,而且状态之间是有先后次序的,必须先进入某 个状态后才能进另一个状态,例如必须进入IDLE(待机)状态 

后才能进入GAME(游戏)状态,因此这样就涉及到从一个状态 

到另一个状态的转换过程。 

下面以IDLE下的Mainmenu状态为例,解释状态转换的 

大致过程: 3.1重要的数据结构 typedefstruct{ 

BOOLEAN bEnabled; Dialog pDialog; 

StateTbl pStateTbl; 

)Entity; 

系统中只有一个Entity结构体变量,该结构体中的成员 

变量pDialog是一个指向Dialog结构体的指针,Dialog结构体 在前面进过,它是用来显示用户界面,响应用户操作的实体,它 

由一个到多个控件组成;成员变量pStateTbl是一个指向State—