您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 几种常用嵌入式GUI设计
嵌入式GUI设计陈俊彦嵌入式GUI概述什么是GUI?图形用户界面(GraphicalUserInterface,简称GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。嵌入式GUI的特点嵌入式GUI的广泛应用是当今计算机发展的重大成就之一,它极大地方便了非专业用户的使用,人们从此不再需要面对功能单一的按键和死记硬背大量的命令,取而代之的是可以通过窗口、菜单、按钮等方式来方便地进行操作。嵌入式GUI具有下面几个方面的基本要求:轻型、占用资源少、高性能、高可靠性、便于移植、可配置等特点。嵌入式GUI的准则减少用户的认知负担保持界面的一致性满足不同目标用户的需求用户界面友好性图标识别平衡性图标功能一致性建立界面与用户的互动交流可操控性和扩充性的易用性嵌入式GUI的应用领域手机通讯移动平台平板电脑数码产品车载系统产品智能家电产品工业数控平台嵌入式GUI的组成部分(一)桌面在启动时显示,也是界面中最底层,有时也指代包括窗口、文件浏览器在内的“桌面环境”。在桌面上由于可以重叠显示窗口,因此可以实现多任务化。视窗应用程序为使用数据而在图形用户界面中设置的基本单元。应用程序和数据在窗口内实现一体化。在窗口中,用户可以在窗口中操作应用程序,进行数据的管理、生成和编辑。通常在窗口四周设有菜单、图标,数据放在中央。嵌入式GUI的组成部分(二)单一文件界面在窗口中,一个数据在一个窗口内完成的方式。在这种情况下,数据和显示窗口的数量是一样的。若要在其他应用程序的窗口使用数据,将相应生成新的窗口。因此窗口数量多,管理复杂。多文件界面在一个窗口之内进行多个数据管理的方式。这种情况下,窗口的管理简单化,但是操作变为双重管理。嵌入式GUI的组成部分(三)标签多文件界面的数据管理方式中使用的一种界面,将数据的标题在窗口中并排,通过选择标签标题显示必要的数据,这样使得接入数据方式变得更为便捷。菜单将系统可以执行的命令以阶层的方式显示出来的一个界面。一般置于画面的最上方或者最下方,应用程序能使用的所有命令几乎全部都能放入。嵌入式GUI的组成部分(四)图标显示在管理数据的应用程序中的数据,或者显示应用程序本身。应用程序的图标只能用于启动应用程序。按钮菜单中,利用程度高的命令用图形表示出来,配置在应用程序中,成为按钮。应用程序中的按钮,通常可以代替菜单。嵌入式GUI的分类(一)低端嵌入式GUI:μC/GUI、RT-Thread/GUI适用平台:单片机、ARM7、ARMCortex-M开发语言:C语言操作系统:μC/OS、RT-Thread嵌入式GUI的分类(二)中端嵌入式GUI:miniGUI、OpenGUI、Microwindows适用平台:ARM7、ARM9、ARM11、ARMCortex-R开发语言:C语言操作系统:嵌入式Linux、μC/Linux嵌入式GUI的分类(三)高端嵌入式GUI:Qt/Embedded(Qtopia)、Android、MFC适用平台:ARM9、ARM11、ARMCortex-A开发语言:C++语言、JAVA语言操作系统:嵌入式Linux、WinCE/WinPhoneRT-Thread/GUIRT-Thread是一款来自中国的开源实时操作系统,由国内一些专业开发人员开发、维护。它不仅仅是一款高效、稳定的实时核心,也是一套面向嵌入式系统的软件平台,覆盖了全抢占的实时操作系统内核,小巧而与底层具体实现无关的文件系统,轻型的TCP/IP协议栈以及轻型的多窗口多线程图形用户界面。RT-Thread/GUI是一个图形用户界面,它专为RT-Thread操作系统而开发,并在一些地方采用了RT-Thread特有功能,这个图形用户界面组件能够为RT-Thread上的应用程序提供人机界面交互功能。RT-Thread/GUI组件功能多线程图形用户界面依赖与RT-Thread线程调度器的实时图形用户界面创新地在嵌入式系统中引入面板(panel)的概念,缩小了多线程,多窗口GUI编程代价C语言方式的全面向对象设计界面主题支持中文文本显示支持丰富的控件支持RT-Thread/GUI架构RT-Thread/GUI采用传统的客户端/服务器的结构,但和传统的C/S架构中把绘画操作放于服务器不同的是,绘画操作完全由客户端自行完成。服务端仅维护着各个客户端的位置信息服务端当一个图形应用(workbench)或者窗口(window)需要创建时,需要向GUI服务端请求允许创建相应的实例。GUI服务端将记录下相应的位置信息。在RT-Thread/GUI中,屏幕会被分隔成数个互不相重叠的面板(panel)。面板数也可以只有一个(即全屏),或所有面板拼接成的总体面积并不完全覆盖真实的物理屏面积。服务端提供的功能主要是客户端(线程)的管理及鼠标、键盘事件的派发服务端模块GUIServer服务端事件处理主线程Panel面板及面板之上的线程维护TopWin顶层窗口信息维护Mouse鼠标相关信息处理面板(Panel)RT-Thread/GUI服务端维护着屏幕的面板划分,并且面板与面板之间是相互不重叠。注册面板可以通过如下函数接口进行:voidrtgui_panel_register(char*name,rtgui_rect_t*extent)例子:rtgui_rect_trect;rect.x1=0;rect.y1=0;rect.x2=240;rect.y2=320;rtgui_panel_register(“main”,&rect);rtgui_panel_set_default_focused(“main”);TopWin当应用线程需要创建窗口时,需要向GUI服务端请求创建,并把它的位置信息送给服务端。服务端在收到窗口创建请求后,需要把它的位置信息加入到topwin列表中,并根据它的情况决定是否添加边框、标题信息。鼠标键盘鼠标与键盘的处理亦由GUI服务端处理,它们都转换成消息事件的方式进行处理。所以鼠标、键盘驱动最主要的方法就是:把相应的鼠标状态和键值转换成事件的形式发送给GUI服务端线程。发送给GUI服务端的函数是:voidrtgui_server_post_event(structrtgui_event*event,rt_size_tsize);客户端一个客户端是一个独立的可执行体:线程客户端会负责大部分的UI操作客户端线程的主要操作分为两大类:事件处理和绘图操作客户端根据上层应用的不同相应的分成了两类:workbench和windowWindow可以是一个独立窗口(具有独立线程),也可以是workbench下的附属窗口(事件处理,绘图操作依附于workbench线程)GUI客户端需要建立相应的事件处理消息队列workbench(一)workbench是附着在面板上的应用程序,每一个workbench具备独立的线程执行上下文环境,相应线程具备自己的消息邮箱,其事件处理循环即为处理达到的消息事件。创建一个workbench时,应用程序需要主动发送相应事件给GUI服务端并且给出它附着(attach)的面板名称。如果GUI服务端获得workbench的附着请求后,查询系统中确实存在相应面板,它将把相应面板的信息返回给workbench以允许它在上面进行显示。当workbench获得了面板信息后,它将能够在绘图时直接调用底层图形驱动接口进行相应位置的绘图。workbench消息处理序列图workbench(二)创建一个workbench应用,主要有三点:1、创建相应的线程(执行环境);2、提供相应的事件处理消息队列;3、执行workbench的事件循环RT-Thread/GUI支持两种模式,小模式和标准模式。当使用小模式时,相应的内存占用更少。而标准模式则支持更多的回调函数,并且支持自动布局引擎。当使用小模式时,消息队列的单个消息可以相应小一些,但不能小于32字节window创建一个独立的window应用,主要有三点:1、创建相应的线程(执行环境);2、提供相应的事件处理消息队列;3、执行window的事件循环窗口是具备最高优先级的,永远位于workbench的顶端,适合做为消息窗口或输入显示出来设备上下文客户端绘图,需要在正确的地方绘制,例如当一个window在一个workbench之上时。当workbench需要更新,它不能够把window覆盖的区域给错误地绘成自己的图形。所以当一个客户端需要绘图时,它需要一个知道它当前所在区域的上下文环境,这个就是:(图形)设备上下文。设备上下文种类设备上下文(DeviceContext)可以认为是能够绘图的一个上下文环境。当前RT-Thread/GUI中包括两种DC:1、硬件DC,即支持操作目标硬件的上下文环境structrtgui_dc*rtgui_dc_hw_create(rtgui_widget_t*owner)2、缓冲DC,即仅仅针对缓冲区进行绘图的上下文环境structrtgui_dc*rtgui_dc_buffer_create(intwidth,intheight)RT-Thread/GUI控件类继承图各个控件类列表widget控件rtgui_widget是RT-Thread/GUI系统中控件相关的基类,描述了GUI中一个控件的基本特性,定义了最基本的事件处理方法。在GUI中的其他各种控件都是从它为源头进行派生,所有通过它派生的对象都能够通过RTGUI_WIDGET(obj)的宏转换成rtgui_widget控件来使用,并调用相应的函数方法进行处理。图形上下文控件的背景色、前景色、文字对齐模式及字体,在RT-Thread/GUI里统称为GC,即图形上下文。对于控件对象,可以通过如下宏获得相应的数据:RTGUI_WIDGET_FOREGROUND(w)RTGUI_WIDGET_BACKGROUND(w)RTGUI_WIDGET_TEXTALIGN(w)RTGUI_WIDGET_FONT(w)其中,w是一个rtgui_widget对象widget部分相关函数rtgui_widget_create创建新widget控件rtgui_widget_destroy删除widget控件rtgui_widget_set_event_handler设置widget控件的事件处理函数rtgui_widget_event_handlerwidget控件的默认事件处理函数rtgui_widget_focus设置控件的焦点rtgui_widget_unfocus去除控件的焦点container控件rtgui_container被设计成RTGUI中的一个容器类,它允许在它之下包含数个子控件,子控件的大小位置必须在container大小位置之内,否则自动被剪切掉。rtgui_container内的控件绘图次序是按照从上到下的次序进行的。container结构体:container部分相关函数rtgui_container_add_child在container容器中添加一个子控件rtgui_container_remove_child在container容器中删除一个子控件rtgui_container_destroy_children在container容器中删除所有子控件rtgui_container_get_first_child获得container容器中第一个子控件label控件label控件是一个文本标签,在屏幕相应位置显示相应的文本。其中最主要的属性是显示的文字文本。相关函数rtgui_label_create创建label控件rtgui_label_destroy删除label控件rtgui_label_event_handler控件默认事件处理rtgui_label_s
本文标题:几种常用嵌入式GUI设计
链接地址:https://www.777doc.com/doc-3952714 .html