【文档说明】嵌入式GUI设计课件.ppt,共(85)页,491.500 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-92636.html
以下为本文档部分文字说明:
嵌入式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/Li
nux嵌入式GUI的分类(三)高端嵌入式GUI:Qt/Embedded(Qtopia)、Android、MFC适用平台:ARM9、ARM11、ARMCortex-A开发语言:C++语言、JAVA语言操作系统:嵌入式Linux、WinCE/WinPhoneRT-Thread/GUIRT-T
hread是一款来自中国的开源实时操作系统,由国内一些专业开发人员开发、维护。它不仅仅是一款高效、稳定的实时核心,也是一套面向嵌入式系统的软件平台,覆盖了全抢占的实时操作系统内核,小巧而与底层具体实现无关的文件系统,轻型的TCP/IP协议栈以
及轻型的多窗口多线程图形用户界面。RT-Thread/GUI是一个图形用户界面,它专为RT-Thread操作系统而开发,并在一些地方采用了RT-Thread特有功能,这个图形用户界面组件能够为RT-T
hread上的应用程序提供人机界面交互功能。RT-Thread/GUI组件功能多线程图形用户界面依赖与RT-Thread线程调度器的实时图形用户界面创新地在嵌入式系统中引入面板(panel)的概念,缩小了多线程,多窗口GUI编程代价C语言方式的
全面向对象设计界面主题支持中文文本显示支持丰富的控件支持RT-Thread/GUI架构RT-Thread/GUI采用传统的客户端/服务器的结构,但和传统的C/S架构中把绘画操作放于服务器不同的是,绘画操作完全由客
户端自行完成。服务端仅维护着各个客户端的位置信息服务端当一个图形应用(workbench)或者窗口(window)需要创建时,需要向GUI服务端请求允许创建相应的实例。GUI服务端将记录下相应的位置信息。在RT-Thread/G
UI中,屏幕会被分隔成数个互不相重叠的面板(panel)。面板数也可以只有一个(即全屏),或所有面板拼接成的总体面积并不完全覆盖真实的物理屏面积。服务端提供的功能主要是客户端(线程)的管理及鼠标、键盘事件的派发服务端模块GUIServer服务端事件处理主线程Panel
面板及面板之上的线程维护TopWin顶层窗口信息维护Mouse鼠标相关信息处理面板(Panel)RT-Thread/GUI服务端维护着屏幕的面板划分,并且面板与面板之间是相互不重叠。注册面板可以通过如下函数接口进行:voidrtgui_panel_register(cha
r*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);rt
gui_panel_set_default_focused(“main”);TopWin当应用线程需要创建窗口时,需要向GUI服务端请求创建,并把它的位置信息送给服务端。服务端在收到窗口创建请求后,需要把它的位置信息加入到topwin列表中,并根据它的情
况决定是否添加边框、标题信息。鼠标键盘鼠标与键盘的处理亦由GUI服务端处理,它们都转换成消息事件的方式进行处理。所以鼠标、键盘驱动最主要的方法就是:把相应的鼠标状态和键值转换成事件的形式发送给GUI服务端线程。发送给GU
I服务端的函数是:voidrtgui_server_post_event(structrtgui_event*event,rt_size_tsize);客户端一个客户端是一个独立的可执行体:线程客户端会负责大
部分的UI操作客户端线程的主要操作分为两大类:事件处理和绘图操作客户端根据上层应用的不同相应的分成了两类:workbench和windowWindow可以是一个独立窗口(具有独立线程),也可以是workbench下的附属窗口(事件处
理,绘图操作依附于workbench线程)GUI客户端需要建立相应的事件处理消息队列workbench(一)workbench是附着在面板上的应用程序,每一个workbench具备独立的线程执行上下文环境,相应线程具备自己的消息邮箱,其事件处理循环即为处理达到的消息事件。创建一个w
orkbench时,应用程序需要主动发送相应事件给GUI服务端并且给出它附着(attach)的面板名称。如果GUI服务端获得workbench的附着请求后,查询系统中确实存在相应面板,它将把相应面板的信息返回给workbench以允许它在上面进行显示。当wor
kbench获得了面板信息后,它将能够在绘图时直接调用底层图形驱动接口进行相应位置的绘图。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_creat
e(intwidth,intheight)RT-Thread/GUI控件类继承图各个控件类列表widget控件rtgui_widget是RT-Thread/GUI系统中控件相关的基类,描述了GUI中一个控件的基本特性,定义了最基本的事件处理方法。在GUI中的其他各种控件都是从它为
源头进行派生,所有通过它派生的对象都能够通过RTGUI_WIDGET(obj)的宏转换成rtgui_widget控件来使用,并调用相应的函数方法进行处理。图形上下文控件的背景色、前景色、文字对齐模式及字体,在RT-T
hread/GUI里统称为GC,即图形上下文。对于控件对象,可以通过如下宏获得相应的数据:RTGUI_WIDGET_FOREGROUND(w)RTGUI_WIDGET_BACKGROUND(w)RTGUI_WIDG
ET_TEXTALIGN(w)RTGUI_WIDGET_FONT(w)其中,w是一个rtgui_widget对象widget部分相关函数rtgui_widget_create创建新widget控件rtgui_widge
t_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_a
dd_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_set_text设置标签文本rtgui_label_get_text获得标签
文本button控件button控件是一个带标签的按钮控件,继承自rtgui_label,所以label的方法也可应用于button控件。相关函数:rtgui_button_create创建一个按钮控件rtgui_pushbutton_creat
e创建push按钮控件,,即按下按钮时,按钮的状态将被保持,而不是当鼠标抬起时,按钮自动恢复为原样。只有当鼠标再次点击按钮时,它才能恢复到初始状态。button控件(二)rtgui_button_destroy删除按钮控件rtgui_button_set_pressed_image设置
按钮按下时显示图像rtgui_button_set_unpressed_image设置按钮正常状态时显示图像rtgui_button_set_onbutton设置按钮控件发生按下事件时指向被调用的回调函数指针rtgui_button_even
t_handlerrtgui_button类的默认事件处理函数工作台应用workbench部分相关函数:rtgui_workbench_create创建一个workbenchrtgui_workbench_destroy删除workbenchrtgui_workbench_event_hand
lerworkbench的默认事件处理函数rtgui_workbench_show显示一个workbenchrtgui_workbench_hiden隐藏一个workbenchrtgui_workbench_add_view在workbench上添加一个视图rtgui_w
orkbench_remove_view在workbench上删除一个视图工作台视图view视图可以看成是workbench应用上的一个个面,当然一个时刻workbench只能显示其中一个面,这个面可以调用函数rtgui_workbench_get_current_
view获得部分相关函数:rtgui_view_create创建一个视图。视图创建后,需加入到workbench中才能使用rtgui_view_destroy删除一个视图rtgui_view_event_handler视图控件默认的事件处理函数窗口window部分相关函数
:rtgui_win_create创建一个窗口。在创建窗口时,需要设定上层是否有父控件(通过parent_toplevel参数)。当有父控件存在时,其事件的上下文执行环境将依赖于父控件所属的线程。当parent_toplevel=
RT_NULL时,那么这将是一个独立的窗口,具备独立的线程执行上下文rtgui_win_destroy删除窗口rtgui_win_show显示一个窗口rtgui_win_hiden隐藏一个窗口RT-Thread/GUI的系统配置RT-T
hread/GUI的配置通常依赖于rtgui_config.h头文件#defineRTGUI_NAME_MAX12/*RTGUI控件名字长度*/#defineRTGUI_USING_FONT16/*支持16点阵字体*/#defi
neRTGUI_USING_FONTHZ/*支持中文字体*/#defineRTGUI_USING_TTF/*支持TTF字体*/#defineRTGUI_USING_SMALL_SIZE#defineRTGUI_USING_MOUSE
_CURSOR#defineRTGUI_DEFAULT_FONT_SIZE12#defineRTGUI_IMAGE_BMP#defineRTGUI_IMAGE_PNG#defineRTGUI_IMAGE_JPEGRT-Threa
d/GUI的图形驱动图形驱动是RT-Thread/GUI最底层的接口,是上层应用绘图操作的最终反映。structrtgui_graphic_driver{char*name;/*设备名称*/rt_uint16_tbyt
e_per_pixel;/*每个像素占用字节数*/rt_uint16_twidth;/*屏幕宽和高*/rt_uint16_theight;void(*screen_update)(rtgui_rect_t*rect);/*
屏幕更新操作*/rt_uint8_t*(*get_framebuffer)(void);/*获得硬件视频帧缓冲*/void(*set_pixel)(rtgui_color_t*c,rt_base_tx,rt_base_ty);void(*get_pixel)(rtgui_color_t
*c,rt_base_tx,rt_base_ty);void(*draw_hline)(rtgui_color_t*c,rt_base_tx1,rt_base_tx2,rt_base_ty);void(*draw_vli
ne)(rtgui_color_t*c,rt_base_tx,rt_base_ty1,rt_base_ty2);void(*draw_raw_hline)(rt_uint8_t*pixels,rt_b
ase_tx1,rt_base_tx2,rt_base_ty);rtgui_list_tlist;/*指向下一驱动列表*/};µC/GUIµC/GUI是Micrium公司开发的通用的嵌入式用户图形界面软件。它给任何使用图形LC
D的应用程序提供独立于处理器和LCD控制器之外的有效的图形用户接口。可以应用于单一任务环境,也可以应用于多任务环境中。µC/GUI能够应用于任何LCD控制器和CPU的任何尺寸的物理显示或者模拟显示中,因为
它的代码都是由ANSI的C语言编写的。µC/GUI的特点◆适用于任何8位/16位/32位CPU,可允许于支持ANSIC的任何编译器◆适用于任何控制器驱动任何LCD(单色,灰度,或者彩色)◆通过配置宏,可支持任何接口◆可
配置显示尺寸◆可在LCD的任何一点上显示字符和画位图◆对于显示尺寸和速度提供优化进程,编译时间依赖于采用的优化进程◆支持虚拟显示,虚拟显示的尺寸比实际显示大。µC/GUI的软硬件需求硬件需求CPU(8/16/32/64位)RAM和ROM有一个完全
的图形LCD(任何类型和分辨率)小的系统(没有视窗管理器)RAM:100字节堆栈:500字节ROM:10~25KB大的系统(包括视窗管理器和控件)RAM:2~6KB(取决于所需窗口的数量)堆栈:1200字
节ROM:30~60KB开发环境(软件需求)需要一个与ANSI兼容的C编译器µC/GUI文件组织(一)uC/GUI\GUI\AntiAlias\目录:这个目录中包含9个文件,处理显示的边缘模糊效果,也就是抗锯齿和优化
LCD锯齿。液晶屏上画斜线往往都有锯齿,所以通过优化算法进行美化。uC/GUI\GUI\ConvertColor\目录:这个目录中包含14个.C文件,涉及调色板模式。µC\GUI的调色板模式支持111模式,222模式,223
,323,332,444,555,565,8666等相关模式。我在论文中使用的LCD屏,为单色16级灰度屏,因而不涉及到这些模式。但为了保持UC\GUI文件的完整性,该目录以及目录下14个文件,仍然保存在移植文件中。uC/GUI\GUI\
ConvertMono\目录:此目录下的文件描述单色显示的不同模式,包含4个文件。µC/GUI文件组织(二)uC/GUI\GUI\Core此目录下包含129个文件,是µC/GUI的核心部分。包括GUI头文件,GUI显示各种文本,二进制,十进制,十六进制,字符型文本,字符串,在不
同的位置显示二进制,十进制,十六进制,字符型文本,字符串等;GUI设置各种字体;GUI的2-D图形库,GUI绘图函数,在各种位置绘各种点,线,位图,多边形,长方形,圆等等;GUI获取函数,获取当前点,线,位图,多边形,长方形,圆,当前字体,当前二进制,十进制,十六进制,字符型文本,字符串
等函数;设置GUI画笔函数;GUI支持的鼠标函数;GUI支持的键盘函数,GUI支持的触摸屏函数;GUI设置LCD函数等等。这些函数,在µC/GUI系统中都是必须的函数。正是这些函数的组合,使得µC/GUI具有复杂而且完备的图形用户接口。而且,这些函数的组合,使得µC/GUI可以单独
的使用,也可以通过配置文件,移植到各种操作系统中使用。µC/GUI文件组织(三)uC/GUI\GUI\Font此目录下包含的是µC/GUI支持的字体。uC/GUI\GUI\LCDDriverLCDAPI目录。该目录
下包含很多已经完备的LCD控制器的驱动程序以及API函数。uC/GUI\GUI\MemDevMemDev主要用于防止在画交迭图时产生抖动。µC/GUI函数绘图不使用MemDev时,画图操作直接写到终端上显示
,交迭绘图执行时刷新屏幕,多次刷新时就会出现抖动。例如,要在背景色中画图,且在前景中写一些透明的文字,实现的步骤就是先画图,然后写文字,那么结果就会出现文字的抖动。如果在程序中使用MemDev,则所有的执行操作都在MemDev中执行,当所有的操作都执行完
毕之后,最后的结果才会送到屏幕上显示,因而可以避免多次刷新,从而避免抖动。此目录下包含这MemDev的所有函数,包括创建MemDev函数,激活MemDev,执行画图操作,显示到终端,删除MemDev函数等等。µC/GUI文件组织(四)uC/GUI\
GUI\Widget此目录包含窗口控件函数,共46个函数。运用窗口管理和回调机制,运用窗口控件函数,可以任意在LCD屏幕上实现类似于windows的界面,这样完备的功能在工业自动化控制和触摸屏应用上有着深远而积
极的意义。此目录下的函数主要包括µC/GUI的窗口控件,如按钮Button,校验窗Checkbox,编辑区Edit,窗口框Framewin,列表Listbox,进度条ProgBar,音频按钮RadioButton,滚动条ScrollerBar
,改变值的灰度条Slider,以及文本框Text相关的各种函数。uC/GUI\GUI\WM此目录包括窗口管理函数,共52个函数。µC/GUI中,窗口管理中的消息传递机制和回调机制,也是µC/GUI的实现难点和
应用难点。4.3节中将详细介绍这两点。此目录下的函数主要包括设置、返回、建立背景窗口、父窗口、各种子窗口以及相应的尺寸、窗口句柄,起点x,y坐标,窗口宽度,高度,位置等等,还包括改变窗口的大小,以及最关键的窗口的回调函数,窗口重
绘函数等等µC/GUI视窗管理器µC/GUI的视窗管理器是一个单独的软件,不是µC/GUI的基本组成部分。详细代码见\uCGUI\GUI\WM视窗管理器提供了一套函数,使你能很容易地对许多窗口进行创建,移动,调整大小及其它操作。它
也可以提供更低层的支持,这通过管理显示屏上的窗口的层,及通过给你的应用程序发送信号以显示影响它的窗口的修改来完成。当使用µC/GUI视窗管理器时,任何能显示在显示终端上的内容都包含在一个窗口里面,这个
窗口是LCD屏幕上的一个给用户画图或者显示目标的区域。窗口可以是任何尺寸的,可以一次在屏幕上显示多个窗口,也可以在其它窗口当中或之前显示窗口。µC/GUI窗口窗口外形是矩形,由它们的原点(左上角的X和Y坐标)及它们的X和Y
尺寸(分别是宽和高)所定义。µC/GUI中一个窗口:1、是一个矩形2、有一个Z坐标3、可能是隐藏的或可见的4、可能拥有有效/或无效区域5、可以或者不可以有透明区域6、可以或者不可以有一个回调函数µC/GUI视窗管理器相关名词(一)活动窗口:当前正在用来画图或是显示操
作的窗口。回调函数回调函数是由用户定义的,当特定事件发生时,指示图形系统调用特定函数的函数。通常当窗口的内容发生改变时,它们用来自动重绘窗口。例如,窗口内显示一幅位图,当窗口移动时,位图并不会自动移动。子/父窗口子窗口是相对于父窗口定义的窗口。无论
何时,只要父窗口移动,则子窗口们都要相应移动。子窗口被父窗口完全包含。拥有同一个父窗口的子窗口们互相间称为兄弟(同胞)。µC/GUI视窗管理器相关名词(二)客户区窗口的客户区就是窗口的可用区。如果窗口包含方框或标题栏,则客户区就是方框或标题栏的内部区域。句柄当一个新
的窗口被创建时,WM分配一个唯一的标识符,称为句柄。句柄用在后续对该窗口操作的所有函数中,而且可以利用该句柄唯一标识该窗口。有效窗口/无效窗口有效窗口是一个已经完全更新,不需要重绘的窗口。不管是完全重绘还是局部重绘。当窗口内容发生改变时,WM则
标识窗口无效。下一次重绘之后(调用回调函数),窗口又变为有效。µC/GUI视窗管理器相关名词(三)隐藏窗口/显示窗口一个隐藏的窗口是不可见的,尽管它仍然存在(有句柄)。当创建一个窗口时,如果没有创建指定的标识的话,默
认状态是隐藏。使一个窗口可见则可以将其显示;使其不可见则可以隐藏它。透明带有透明部分的窗口包括有窗口静止时不被重绘的区域。这些区域的操作就仿佛是下面的窗口可以透过它们显示出来。在这种情况下,下面的窗口在这个透明窗口之前重绘就
显得很重要了。WM能自动处理正确的重绘顺序。µC/GUI视窗管理器相关名词(四)Z-序,底层/顶层尽管一个窗口是在一个只有X和Y坐标构成的二维的屏幕上显示,WM也管理被认为是Z-序,或者深度的座标(一个虚拟的三维的坐标),决定窗口从背景到前景放置。因此窗口可以在另一窗口的上面或下面显示
。将一个窗口设置到底层将会把它放在所有同胞窗口(如果存在)的下面;设置为顶层将会把它放在所有同胞窗口的上面。创建一个窗口时,如果没有指定创建标识符,默认情况下它会被设置在顶层。µC/GUI视窗管理器回调机制µC/GUI提供
给窗口和窗口控件的回调机制的背后,是一个事件驱动标志。在大多数的窗口系统中,流控不仅仅时从用户程序到图形系统,而且还要能够从用户程序到图形系统,并且能够通过用户程序提供的回调函数,返回到用户程序。这个机制,就称为回调机制。在µC/GUI中,回到机制用来在窗口管理中出控
制窗口的重绘操作,这使得窗口管理的有效性成为可能。µC/GUI回调函数的使用使用回调函数建立一个窗口时,必须有一个回调函数。所用的回调函数必须有如下原型:voidcallback(WM_MESSAGE*pMsg)。其中pMsg为指向消息的指针。回调函数
执行的功能依赖于所接收到的消息。以上原型后一般跟着switch表达式,表达式定义不同的case表达式下不同的信息对应的不同行为,至少要有一个重绘函数:WM_PAINT()。设置为视窗管理器执行的回调函数:WM_CALLBACK*WM_SetCallback(WM_HWINhWin,WM_CA
LLBACK*cb)µC/GUI消息传递机制(一)回调函数执行的功能依赖于所接收到的消息。Switch语句中根据消息的类型,分别执行不同的功能。WM_MESSAGE的成员如下:MsgId:消息类型HWin:
目的窗口HWinSrc:源窗口Data.p:数据指针Data.v:数据值µC/GUI消息传递机制(二)MsgId的类型如下:WM_PAINT:窗口重绘WM_CREATE:窗口一建立就发送WM_DEL
ETE:窗口一删除就发送WM_SIZE:窗口尺寸发生改变就发送WM_MOVE:窗口移动就发送WM_SHOW:接收到show命令就发送WM_HIDE:接收到hide命令就发送WM_TOUCH:触摸屏信息应用程
序还可以为自己定义额外的消息。为保证它们不用到uC/GUI的消息ID,用户定义的消息从WM_USER后面开始,如:#defineMY_MESSAGE_AAAWM_USER+0文本显示在LCD上显示文本,可以调用µC/GUI的文本API函数步骤:1、设定当前光标。2、设定字体。3、显示文本例
如:GUI_GotoXY(10,10);//设置坐标GUI_SetFont(&GUI_Font8x16);GUI_DispString(“Hello”);//显示文本在GUIConf.h定义了默认字体在指定光
标显示文本函数GUI_DispStringAt(constcharGUI_FAR*s,intx,inty);绘制图形GUI_DrawLine(intx0,inty0,intx1,inty1)绘一根线GUI_ClearRect(intx0,inty0,intx1,inty1)使用背
景色填充一个矩形区域GUI_FillRect(intx0,inty0,intx1,inty1)绘一个填充的矩形GUI_DrawBitmap(constGUI_BITMAP*pBM,intx,inty)绘一幅位图GUI_DrawCircle(intx0,inty0,intr)绘一个圆
GUI_DrawEllipse(intx0,inty0,intrx,intry)绘一个椭圆窗口控件控件是具有对象性质的窗口,在视窗世界中它们被称为控件,构造用户接口的元素。它们能自动对某些事件起反应;例如
,当一个按钮被按下时,它可能以不同的状态显示。控件需要建立,具有能在它们存在的任何时间修改的特性,在它们不再需要时被删除。与窗口类似,一个控件通过它的建立函数返回的句柄而引用。控件需要使用视窗管理器。一旦一个控
件被建立,它被处理成与其它窗口一样;WM保证它在需要的时候能正确的显示(及重绘)。当编写一个应用或一个用户接口时,控件并不需要,但是它们能使编程更容易。窗口有效控件按钮控件BUTTON的API重绘机制一个控件根据它的特性绘制自己。这一工作通过调用WM的API函数WM_Ex
ec()来完成。如果程序中没有调用WM_Exec(),就必须调用WM_Paint()函数来绘制控件。在多任务环境中的µC/GUI,一个后台任务通常用于调用WM_Exec()并更新控件(及其它所有带有回调函数的窗口)。这样就不必手工调用WM_Paint(
);然而,如果想控件能立即被重绘的话,仍然可使用手工调用方式。当一个控件的属性被改变时,控件的窗口(或者它的一部分)被标记为无效,但是它不会立即重绘。因此,这部分代码运行非常快。重绘在后面的时间通过WM完成,或通过为控件调用WM_Paint()函数(或者WM_Exec
(),直到所有的窗口都被重绘)来强制执行。µC/GUI系统配置uC/GUI\Config\配置目录:GUICONF.h:配置GUI移植到不同操作系统的选项。GUITouchConf.h:配置触摸屏的选项以及编
写触摸屏的驱动。本文移植µC/GUI所使用的LCD屏不支持触摸屏,所以此文件为空。LCD_Conf.h:LCD显示屏的选项文件,包括bpp,调试板模式,水平、竖直方向的分辨率等等。LCD驱动程序一个LCD驱动程序支持一个具体系列的LCD控制器,而所有的LCD都配备一个或多个这些控制
器。驱动程序本质上是通用的,意思是它可以通过修改配置文件LCDConf.h来进行配置。这些文件包含所有可配置的选项用于驱动程序,以及多重的定义用于硬件如何访问及控制器如何与LCD连接。µC/GUI自带有一些LCD控制器的驱动程序,在LCD_CONTROLLER宏进行定义。若µC/GUI
没有相应的驱动程序,则定义LCD_CONTROLLER为0LCD驱动API函数(一)LCD驱动API函数(二)MiniGUIMiniGUI是由北京飞漫软件技术有限公司创办的开源Linux图形用户界面支持系统,经过近些年的发展,MiniGUI已经发展成为比较
成熟的性能优良的、功能丰富的跨操作系统的嵌入式图形界面支持系统。“小”是MiniGUI的特色,它目前已经广泛应用于通讯、医疗、工控、电子、机顶盒、多媒体等领域。目前,MiniGUI的最新版本为MiniGUI3.0。MiniGUI对中文的
支持最好,它支持GB2312与BIG5字元集,其他字元集也可以轻松加入。MiniGUI简介(一)MiniGUI是一款面向嵌入式系统的高级窗口系统和图形用户界面(GUI)支持系统,由魏永明先生于1998年底开始开发。2002年,魏永明先
生创建北京飞漫软件技术有限公司,为MiniGUI提供商业技术支持,同时也继续提供开源版本,飞漫软件是中国地区为开源社区贡献代码最多的软件企业。最后一个采用GPL授权的MiniGUI版本是1.6.10,从MiniGUI2.0.4开始M
iniGUI被重写并使用商业授权。历经十余年时间,MiniGUI已经成为性能优良、功能丰富的跨操作系统嵌入式图形用户界面支持系统,支持Linux/uClinux、ThreadX、eCos、uC/OS-II、VxWorks等操作系统和数十种SoC芯片,已验证
的硬件平台包括ARM-basedSoCs、MIPSbasedSoCs、PowerPC、Intelx86等等,广泛应用于通讯、医疗、工控、电力、机顶盒、多媒体终端等领域。使用MiniGUI成功开发产品的企业有华为、中
兴通讯、大唐移动、长虹、TCL、联想、迈瑞、南瑞、炬力、D2等。这些用户广泛分部在中国大陆、台湾、新加坡、韩国、美国、德国、意大利、印度、以色列等国家和地区。MiniGUI简介(二)2010年,飞漫软件把最新版的MiniGUI、mDolphin、mPeer、mStudi
o等系统整合在一起,推出了合璧操作系统(HybridOS)解决方案,是一整套专为嵌入式设备打造的快速开发平台,集成了飞漫软件10年的嵌入式行业研发经验和众多成熟的产品,使众多的希望在嵌入式设备上做开发的中小型企业,摆脱了“不稳定的内核以及驱动程序”、“交叉编
译工具链、基础函数库存在大量缺陷”、“不恰当的开源软件”、“高水平嵌入式开发工程师缺乏”等这些问题的困扰,从而能够在一个运行稳定、功能强大的小巧系统内核基础上,专注开发产品。合璧操作系统(HybridOS)采用新的商业授权模式,性
价比颇高。截止2011年5月,MiniGUI的最新版本是3.0.12,MiniGUI将作为合璧操作系统(HybridOS)的一个组成部分而不断演进,推荐新老用户使用合璧操作系统(Hybridos)作为嵌入式开发平台,必将节省大量的开发成本和时间。
硬件适配可运行于各种含有MMU(内存管理单元)的32位处理器架构之上,如ix386、ARM、MIPS、PowerPC等。支持低端显示设备(比如单色LCD)和高端显示设备(8位色及以上显示设备)。通过Min
iGUI的图形抽象层及图形引擎技术,还可以支持特殊的显示设备,比如YUV显示设备。对显示设备分辨率无最大和最小限制。副屏支持。当系统中有多个视频设备时,可将一个作为MiniGUI的主屏,实现完整的多窗口系统;而其它设备作为副屏,在其上通过MiniGUI的
图形接口来实现文字渲染、图形显示等功能。可支持各种输入设备,如PC键盘、PC鼠标、小键盘(Keypad)、触摸屏、遥控器等等。多种键盘布局的支持。MiniGUI除支持常见的美式PC键盘布局之外,还支持法语、德语等西欧语种的键盘布局。系统适配Min
iGUI的静态存储随配置选项的不同而不同,最少需占用1MB静态存储空间。MiniGUI启动后,初始占用1MB动态存储空间。建议系统内存为8MB以上。支持Linux操作系统(非uClinux操作系统),可以MiniGUI-Processes、MiniGUI-Thre
ads或者MiniGUI-Standalone三种运行模式运行。内建资源支持。可以将MiniGUI所使用的资源,诸如位图、图标和字体等编译到函数库中,该特性可提高MiniGUI的初始化速度,并且非常适合无文件系统支
持的实时嵌入式操作系统。针对嵌入式系统的特殊支持,包括一般性的I/O流操作,字节序相关函数等。MiniGUI的技术优势(一)可伸缩性强。MiniGUI丰富的功能和可配置特性,使得它既可运行于CPU主频只有60MHz的低端产品中,亦可运行于高端嵌入式设备中,并使用MiniGUI的高级控件风格及皮
肤界面等技术,创建华丽的用户界面。轻型、占用资源少。MiniGUI是一个定位于轻量级的嵌入式图形库,对系统资源的需求完全考虑到了嵌入式设备的硬件情况,如MiniGUI库所占的空间最小可以裁剪到500K左右。此外,测试结果表明,MiniGUI能够在CPU主频为30MHz,仅有4MRA
M的系统上正常运行(使用uClinux操作系统),这是其它针对嵌入式产品的图形系统所无法达到的。MiniGUI的技术优势(二)高性能、高可靠性。MiniGUI良好的体系结构及优化的图形接口,可确保最快的图形绘制速度。在设计之初,就充分考虑到了实时嵌入式系统的特点,针对多窗口环境下
的图形绘制开展了大量的研究及开发,优化了MiniGUI的图形绘制性能及资源占用。MiniGUI在大量实际系统中的应用,尤其在工业控制系统的应用,证明MiniGUI具有非常好的性能。从1999年MiniGUI的第一个版本发布以来,就有许多产品和项目使用Min
iGUI,MiniGUI也不断从这些产品或者项目当中获得发展动力和新的技术需求,逐渐提高了自身的可靠性和健壮性。有关MiniGUI的最新成功案例,您可以访问飞漫公司网站的典型案例部分。可配置性。为满足嵌入式系统各种各样的需求,必须要求GUI
系统是可配置的。和Linux内核类似,MiniGUI也实现了大量的编译配置选项,通过这些选项可指定MiniGUI库中包括哪些功能而同时不包括哪些功能。MiniGUI软件架构图MiniGUI的运行模式(一)MiniGUI-Thread运行在M
iniGUI-Threads上的程序可以在不同的线程中建立多个窗口,但所有的窗口在一个进程或者地址空间中运行。这种运行模式主要用来支持大多数传统意义上的嵌入式操作系统,比如VxWorks、ThreadX、uC/OS-II、eCos等等。当然,在Lin
ux和uClinux上,MiniGUI也能以MiniGUI-Threads模式运行。MiniGUI-ProcesseMiniGUI-Processes上的每个程序是单独的进程,每个进程也可以建立多个窗口,并且实现了多进程窗口系统。MiniGUI-Processes适合于具有完整UNIX特性的嵌
入式操作系统。该运行模式在MiniGUIV2.0中提供。MiniGUI-Standalone这种运行模式下,MiniGUI可以以独立任务的方式运行,既不需要多线程也不需要多进程的支持,这种运行模式适合功能单一的应用场合。MiniGUI的运行模式(二)一般而言,MiniGUI-
Standalone模式的适应面最广,可以支持几乎所有的操作系统(目前只用来提供对Linux/uClinux操作系统的支持);MiniGUI-Threads模式的适用面次之,可运行在支持多任务的实时嵌入式操作系统,或者具备完整UNIX特性的普通操作系统;MiniGU
I-Processes模式的适用面较小,它仅适合于具备完整UNIX特性的嵌入式操作系统,比如Linux。但不论采用哪种运行模式,MiniGUI为上层应用软件提供了最大程度上的一致性;只有少数几个涉及初始化的接口在不同运行模式上有所不同。MiniGUI源代码资源包Lib
minigui-1.6.x.tar.gz:MiniGUI函数库源代码,其中包括libminigui、libmgext和libbcongui。Minigui-res-1.6.x.tar.gz:MiniGUI所使用的资源,包
括基本字体、图标、位图和鼠标光标Med-1.6.x.tar.gz:MiniGUI的综合演示程序Mg-samples-1.6.x.tar.gz:《MiniGUI编程指南》的配套示例程序安装资源文件解开资源包tarzxfminigui-res-1.
6.x.tar.gz进入minigui-res-1.6.x目录使用超级用户身份运行makeinstallsumakeinstall编译MiniGUI解压libmingui-1.6.x.tar.gz包tarzxflibminigui-1.6.x.tar.gz进入libminigui-1.6
.x目录运行./configure使用超级用户身份安装编译sumake;makeinstall修改/etc/ld.so.conf文件,将/usr/local/lib目录添加到该文件最后一行。执行/sbin/ldconfig使能该配置编译MiniGUI的演示程序解
压mde-1.6.x.tar.gz包tarzxfmde-1.6.x.tar.gz进入mde-1.6.x目录运行./configure编译make安装QVFB解压qvfb-1.1.tar.gz包tarzxfqvfb-1.1.tar.gz进入qvfb-1.1目
录运行./configure使用超级用户身份编译sumake;makeinstall运行MiniGUI演示程序打开QVFBqvfb–width640–height480–depth16&进入mde-1.6.x目录中的gdidemo目录执行gdide
mo./gdidemo