嵌入式图形用户界面编程_第1页
嵌入式图形用户界面编程_第2页
嵌入式图形用户界面编程_第3页
嵌入式图形用户界面编程_第4页
嵌入式图形用户界面编程_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式图形用户界面编程综合课程设计2013.9.27嵌入式GUI概述GUI(GraphicsUserInterfase),图形用户界面,借助菜单、按钮等标准界面元素和鼠标进行操作,帮助用户方便地向计算机系统发出指令,并将系统运行的结果同样以图形方式显示给用户。嵌入式GUI:轻型、占用资源少、高性能、高可靠性、可配置。常用嵌入式GUIMicroWindowsMiniGUI其他图形平台:Qt/Embedded等IntroductionMiniGUI,是魏永明先生于1998年底主持和开发的一个自由软件项目,现由北京飞漫软件技术有限公司维护并开展后续开发。最后一个采用GPL授权的MiniGUI版本是1.6.10,从MiniGUI2.0.4开始MiniGUI被重写并使用商业授权。Introduction历经十余年时间,MiniGui已经成为性能优良、功能丰富的嵌入式图形用户界面支持系统,可支持任意一个多任务嵌入式操作系统;实际已支持linux/uClinux、eCos、uC/OS-Ⅱ、VxWorks等嵌入式操作系统和数十种SOC芯片,已验证的硬件平台包括ARM-basedSoCs、MIPSbasedSoCs、IA-basedSoCs、PowerPC、M68K(DragonBall/ColdFire)、Intelx86等等。广泛应用于通讯、医疗、工控、电力、机顶盒、多媒体终端等领域。使用MiniGUI成功开发产品的企业有华为、中兴通讯、大唐移动、长虹、TCL、联想、迈瑞、南瑞、炬力、D2等。这些用户广泛分部在中国大陆、台湾、新加坡、韩国、美国、德国、意大利、印度、以色列等国家和地区。Introduction值得一提的是,在中国自主开发的3G通讯标准TD-SCDMA中,约有60%获得入网许可证的TD-SCDMA手机使用MiniGUI作为其嵌入式图形平台,以支撑浏览器、可视电话等3G应用软件的运行,其中有联想TD30t、海信T68、中兴通讯U85等大家熟悉的TD手机型号。MiniGUI典型应用Wi-Fi手机界面MiniGUI典型应用3G手机联想TD30t,支持可视电话、CMMB手机电视、乐随身听、手机视频等3G典型应用。MiniGUI典型应用下图是飞漫软件为某市政府开发的法律及政务查询系统。MiniGUI典型应用东大集成电路有限公司采用MiniGUI在Linux操作系统上开发的PDA产品界面MiniGUI典型应用南京南瑞自动控制有限公司采用MiniGUI开发的电力监控设备特点优势

MiniGUI为嵌入式Linux系统提供了完整的图形系统支持,是全球针对嵌入式Linux仅有的两个商用嵌入式GUI系统之一。MiniGUI为嵌入式Linux系统提供了完整的多进程支持;可以MiniGUI-Processes、MiniGUI-Threads或者MiniGUI-Standalone三种运行模式运行。MiniGui的三种运行模式Minigui-Threads。运行在Minigui-Threads上的程序可以在不同的线程中建立多个窗口,但所有的窗口在一个进程或者地址空间中运行,这种模式适合大多数传统意义上的嵌入式操作系统,如linux,uClinux;也是默认模式。Minigui-Lite。和Minigui-Threads相反,它上的每个程序是单独的进程,每个进程也可以建立多个窗口。它适合具有完整UNIX特性的嵌入式Linux;Minigui-Standalone。这种运行模式下,MiniGUI可以以独立进程方式运行,既不需要多线程也不需要多进程的支持,这种模式适合功能单一的应用场合。比如uClinux的嵌入式产品中。MiniGUI的主要技术特性1、硬件适配性:

可运行于各种含有MMU(内存管理单元)的32位处理器架构之上,如ix386、ARM、MIPS、PowerPC等。支持低端显示设备(比如单色LCD)和高端显示设备(8位色及以上显示设备)。对显示设备分辨率无最大和最小限制。MiniGUI的主要技术特性

副屏支持。当系统中有多个视频设备时,可将一个作为MiniGUI的主屏,实现完整的多窗口系统;而其它设备作为副屏,在其上通过MiniGUI的图形接口来实现文字渲染、图形显示等功能。

可支持各种输入设备,如PC键盘、PC鼠标、小键盘(Keypad)、触摸屏、遥控器等等。

多种键盘布局的支持。MiniGUI除支持常见的美式PC键盘布局之外,还支持法语、德语等西欧语种的键盘布局。

MiniGUI的主要技术特性2、资源消耗:MiniGUI的静态存储随配置选项的不同而不同,最少需占用1MB静态存储空间。MiniGUI启动后,初始占用1MB动态存储空间。建议系统内存为8MB以上。MiniGUI的主要技术特性3、操作系统适配性:支持Linux操作系统(非uClinux操作系统)。内建资源支持。可以将MiniGUI所使用的资源,诸如位图、图标和字体等编译到函数库中,该特性可提高MiniGUI的初始化速度,并且非常适合无文件系统支持的实时嵌入式操作系统。针对嵌入式系统的特殊支持,包括一般性的I/O流操作,字节序相关函数等。MiniGUI的主要技术特性4、窗口子系统特性:完备的多窗口机制和消息传递机制。使用MiniGUI-Threads运行模式时,可在不同线程中创建主窗口,并支持线程间的消息传递;使用MiniGUI-Processes运行模式时,支持完整的多进程窗口系统。对话框和消息框支持。MiniGUI的主要技术特性提供常用的控件类,包括静态文本框、按钮、单行和多行编辑框、列表框、组合框、菜单按钮、进度条、滑块、属性页、工具栏、树型控件、月历控件、旋钮控件、酷工具栏、网格控件、动画控件等。其它GUI元素,包括菜单、加速键、插入符、定时器等。MiniGUI的主要技术特性5、图形子系统特性:提供有增强GDI函数,包括光栅操作、复杂区域处理、椭圆、圆弧、多边形以及区域填充等函数。在提供有兼容于C99规范的数学库平台上,还提供有高级二维绘图函数,可设置线宽、线型以及填充模式等。通过MiniGUI的图形抽象层及图形引擎技术,也可以让上述高级GDI接口在低端显示屏上实现。各种流行图像文件的支持,包括WindowsBMP、GIF、JPEG、PNG等(JPEG及PNG的支持通过libjpeg及libpng函数库提供)。MiniGUI的主要技术特性Windows的资源文件支持,如位图、图标、光标等。多字符集和多字体支持,目前支持ISO8859-1~ISO8859-15、GB2312、GBK、GB18030、BIG5、EUC-JP、Shift-JIS、EUC-KR、UNICODE(UTF-8、UTF-16编码)等字符集,支持等宽点阵字体、变宽点阵字体、Qt/Embedded使用的嵌入式字体QPF、TrueType矢量字体(对TrueType的支持通过freetype1.3函数库提供)。

输入法支持,用于提供各种可能的输入形式;内建有适合PC平台的汉字(GB2312)输入法支持,包括内码、全拼、智能拼音、五笔及自然码等。MiniGUI的技术优势可伸缩性强。对CPU主频要求不高,可以运行在CPU主频只有60MHz的低端产品中。轻型、占用资源少。MiniGUI是一个定位于轻量级的嵌入式图形库,MiniGUI库所占的空间最小可以裁剪到500K左右,对目前的嵌入式设备来说,满足这一条件是绰绰有余的。此外,测试结果表明,MiniGUI能够在CPU主频为30MHz,仅有4MRAM的系统上正常运行(使用uClinux操作系统),这是其它针对嵌入式产品的图形系统所无法达到的。MiniGUI的技术优势高性能、高可靠性。MiniGUI良好的体系结构及优化的图形接口,可确保最快的图形绘制速度。可配置性。MiniGUI可对硬件平台,操作系统,运行模式,需要支持的GAL引擎和IAL引擎,以及引擎相关选项。需要支持的字体类型,字符集,图像文件格式,控件类等进行定制配置。

支持多种嵌入式操作系统,具备优秀的可移植性;MiniGui的体系结构FrameWork、MMI、KeyAPPs等应用程序接口MiniGuiPortableLayerANSICDevicesuC/OS-Ⅱ、Linux、uClinux、Linux、VxWorks、pSOSARM、MIPS、PowerPC、ix86MiniGui的体系结构MiniGui有良好软件架构,通过抽象层将MiniGui上层和底层操作系统隔离开来,在不同的的操作系统上,MiniGui提供完全兼容的API接口。基于MiniGui的应用程序一般通过ANSIC库以及MiniGui自身提供的API来实现自己的功能;MiniGui中的“可移植层”可将特定操作系统及底层硬件的细节隐藏起来,而上层应用程序则无需关心底层的硬件平台输出和输入设备。MiniGui特有的运行模式也给跨操作系统的支持提供了便利。MiniGui提供的软件包libminigui-1.6.10.tar.gz:MiniGui函数库源代码,其中包括下面三个函数库:libminigui:提供窗口管理和图形接口的核心函数库,和大量标准控件。libmgext:libminigui的一个扩展库,提供一些高级控件以及文件打开对话框等。libvcongui:一个应用程序可用的虚拟控制台窗口,可以方便在minigui环境中运行字符界面的应用程序。MiniGui提供的软件包minigui-res-1.6.10.tar.gz:MiniGui所使用的资源文件,包括基本字体,图标、位图和鼠标等等。mg-samples-1.6.10.tar.gz:MiniGui应用示列程序。mde-1.6.10.tar.gz:MiniGui的综合演示程序包,包含了MiniGui的控件演示程序、字体演示程序、对话框演示程序、记事本演示程序,还有推箱子、扫雷、俄罗斯方块等游戏。MiniGui的安装1、硬件环境x86PC2、软件环境Linux操作系统----Ubuntu9.10准备源代码包库文件:libminigui-1.6.10.tar.gz资源文件:minigui-res-1.6.10.tar.gz示例文件:mg-samples-1.6.10.tar.gz综合演示文件:mde-1.6.10.tar.gzJPEG图形支持库:jpegsrc.v6b.tar.gzPNG图形支持库:libpng_src.tgzQBFB,模拟帧缓冲支持库参考文献MiniGUI技术白皮书forV2.0.4/1.6.10[PDF]:该文档描述了MiniGUIV2.0.4/1.6.10的技术特性。DatasheetforMiniGUIV2.0.4/1.6.10[PDF]:该文档对MiniGUIV2.0.4/1.6.10产品功能特性进行了详尽的介绍。《MiniGUI用户手册》V2.0.4/1.6.10[PDF]:主要描述MiniGUI的编译时配置选项和运行时配置选项。参考文献《MiniGUI编程指南》V2.0.4/1.6.10[PDF]:该文档是一本关于MiniGUI编程的完整指南,讲述了MiniGUI编程的基础知识和各种编程方法及技巧,并详细地描述了主要的API函数。《MiniGUIAPI参考手册》V1.6.10:本文档是MiniGUIV2.0.4最详尽的应用程序编程接口参考手册。其中描述了MiniGUI所有的函数、结构、消息以及控件的接口定义和使用方法,是进行MiniGUI编程不可缺少的手册。安装minigui资源文件将所下载的源代码包拷贝到工作目录/home/missxx/minigui/下。打开一个终端窗口,切换为超级用户:missxx@missxx-desktop:~/minigui$su密码:root@missxx-desktop:/home/missxx/minigui/#tar-xvzfminigui-res-1.6.10.tar.gz(解压缩)root@missxx-desktop:/home/missxx/minigui/#cdminigui-res-1.6.10(进入到所加压的目录下)root@missxx-desktop:/home/missxx/minigui/minigui-res-1.6.10#makeinstall(安装)root@missxx-desktop:/home/missxx/minigui/minigui-res-1.6.10#ls/usr/local/lib/minigui/res/(在配置文件中有默认的安装路径)查看被安装好的文件如下:bmpcursorfonticonimetabcd..退出文件夹安装minigui库文件root@missxx-desktop:/home/missxx/minigui/#tar-zxvflibminigui-1.6.10.tar.gzroot@missxx-desktop:/home/missxx/minigui/#lsroot@missxx-desktop:/home/missxx/minigui/#cdlibminigui-1.6.10root@missxx-desktop:/home/missxx/minigui/libminigui-1.6.10#lsroot@missxx-desktop:/home/missxx/minigui/libminigui-1.6.10#./configureroot@missxx-desktop:/home/missxx/minigui/libminigui-1.6.10#makeroot@missxx-desktop:/home/missxx/minigui/libminigui-1.6.10#makeinstallroot@missxx-desktop:/home/missxx/minigui/libminigui-1.6.10#ls/usr/local/lib(以配置文件中的默认安装路径查看安装结果)root@missxx-desktop:/home/missxx/minigui/libminigui-1.6.10#cd..说明一般来说,安装软件库后需要将库的路径更新到配置文件/etc/ld.so.conf中。由于配置文件已存在/usr/local/lib路径,因此可不用添加。在安装过程中,使用的是默认配置选项。--target选项用于指定目标平台--prefix选项用于指定minigui函数库的安装路径--host选项用语指明宿主机的类型--enable–lite用于指出生成基于进程的lite版本,而不生成基于线性的thread版本安装minigui支持库libpngroot@missxx-desktop:/home/missxx/minigui#tar–zxvflibpng_src.tgzroot@missxx-desktop:/home/missxx/minigui#cdlibpngroot@missxx-desktop:/home/missxx/minigui/libpng#lsroot@missxx-desktop:/home/missxx/minigui/libpng#makeinstall出现错误提示没有zlib.h,安装apt-getinstallzlib1g-devroot@missxx-desktop:/home/missxx/minigui/libpng#cd..安装minigui支持库libjpegroot@missxx-desktop:/home/missxx/minigui#tar–zxvfjpegsrc.v6b.tar.gzroot@missxx-desktop:/home/missxx/minigui#cdjpeg-6b/root@missxx-desktop:/home/missxx/minigui/jpeg-6b#lsroot@missxx-desktop:/home/missxx/minigui/jpeg-6b#makeinstall安装过程中提示错误:无法创建普通文件“/usr/local/man/man1/cjpeg.1”:没有那个文件或目录make:***[install]错误1。经过查看发现/usr/local/man/下没有man1这个文件夹,建立此文件夹,再安装。root@missxx-desktop:/home/missxx/minigui/jpeg-6b#mkdir/usr/local/man/man1root@missxx-desktop:/home/missxx/minigui/jpeg-6b#makeinstallroot@missxx-desktop:/home/missxx/minigui/jpeg-6b#cd..查看库文件安装是否成功库文件分为动态链接库和静态链接库,查看所安装的库文件:root@missxx-desktop:/home/missxx/minigui/#ls/usr/local/liblibmgext-1.6.so.10libminigui.alibvcongui-1.6.so.10libmgext-1.6.so.10.0.0libminigui.lalibvcongui-1.6.so.10.0.0libmgext.alibminigui.solibvcongui.alibmgext.lalibpng.alibvcongui.lalibmgext.solibpng.solibvcongui.solibminigui-1.6.so.10libpng.so.2miniguilibminigui-1.6.so.10.0.0libpng.so.2.1.0.12python2安装QvfbminiGUI是基于帧缓存的,而不是我们平时PC平台上X窗口,所以需要qvfb模拟帧缓存来运行显示效果。qvfb是基于qt的工具安装的时候要指定qt库,直接下载最新的qt安装。//root@missxx-desktop:/home/missxx/minigui#sudoapt-getinstallqt3-dev-tools-embedded//apt-getinstalllibqt3-headerslibqt3-mt-devroot@missxx-desktop:/home/missxx/minigui#apt-getinstallqt4-dev-tools在提示“解压缩后会消耗掉51.4MB的额外空间。您希望继续执行吗?[Y/n]”后,键入y,回车Qvfb配置先运行下列指令:exportgal_engine=qvfbexportdefaultmode=640x480-16bpp(在这里是640x480不是640*480)exportial_engine=qvfb注意在运行例程的时候先运行qvfb&,打开qvfb后,在FILE—>configure下选择640x48016位色测试:root@missxx-desktop:/home/missxx/minigui#qvfb&编译测试示例程序mg-samples-1.6.10.tar.gz是《MiniGUI编程指南》的示例代码。《MiniGUI编程指南》可从官方网上下载,编译过程如下:root@missxx-desktop:/home/missxx/minigui/#tar–zxvfmg-samples-1.6.10root@missxx-desktop:/home/missxx/minigui/#cdmg-samples-1.6.10root@missxx-desktop:/home/missxx/minigui/mg-samples-1.6.10#lsroot@missxx-desktop:/home/missxx/minigui/mg-samples-1.6.10#./configureroot@missxx-desktop:/home/missxx/minigui/mg-samples-1.6.10#makeinstall运行程序./hellowordroot@missxx-desktop:/home/missxx/minigui/mg-samples-1.6.10#cdsrcroot@missxx-desktop:/home/missxx/minigui/mg-samples-1.6.10/src#./helloworld作业1请大家自己学习安装MiniGui的综合演示程序包:mde-1.6.10.tar.gz以Helloworld程序为例说明程序架构1、头文件#include<minigui/common.h>#include<minigui/minigui.h>#include<minigui/gdi.h>#include<minigui/window.h>#include<minigui/control.h>#include<stdio.h>common.h包括MiniGui常用的宏及数据类型的定义。minigui.h包含了全局的和通用的接口函数以及某些复杂项函数的定义。gdi.h包含了绘图函数的接口的定义。window.h包含了窗口有关的宏、数据类型、数据结构的定义以及函数接口声明。control.h包含了所有内建控件的接口定义。程序架构2)MiniGUIMain函数入口点函数原型:intMiniGUIMain(intargc,constchar*argv[])

{

}

参数argc和argv与C程序main函数的参数argc和argv的含义是一样的,分别为命令行参数个数和参数字符串数组指针。Main函数已经在MiniGUI的函数库中定义了,该函数在进行MiniGUI初始化工作之后调用了MiniGUIMain函数。程序架构3、设置主窗口属性—MAINWINCREATE结构描述

CreateInfo.dwstyle=WS_VISIBLE|WS_BORDER|WS_CAPTION;//设置主窗口风格为初始可见的,并具有边框和标题栏CreateInfo.dwExstyle=WS_EX_NONE;//设置该主窗口没有扩展风格

CreateInfo.spCaption=“Hello,MiniGui!”;//设置主窗口的标题名

CreateInfo.hMenu=0;//设置主窗口没有主菜单

CreateInfo.hCursor=GetSystemCursor(0);//设置主窗口光标为缺省光标

CreateInfo.hIcon=0;//设置主窗口没有图标

CreateInfo.MainWindowProc=HelloWinProc;//设置主窗口的消息处理过程函数,所有发往该窗口的消息由该函数来处理

CreateInfo.lx=0;

CreateInfo.ty=0;

CreateInfo.rx=320;

CreateInfo.by=240;//设置窗口的左上角坐标(0,0),右下角坐标(320,240)

CreateInfo.iBkColor=COLOR_lightwhite;//设置主窗口的背景色为白色,COLOR_lightwhite为预定义像素值

CreateInfo.dwAddData=0;//设置主窗口的附加值为无

CreateInfo.hHosting=HWND_DESKTOP;//设置主窗口的托管窗口为桌面

程序架构4、创建和显示主窗口//创建主窗口

hMainWnd=CreateMainWindow(&CreateInfo);

CreateMainWindow创建主窗口,参数是指向MAINWINCREATE结构的指针CreateInfo,返回值为所创建的主窗口的句柄。MAINWINCREATE结构描述一个主窗口的属性。//显示主窗口

ShowWindow(hMainWnd,SW_SHOWNORMAL);显示主窗口到屏幕上。程序架构5、进入消息循环事件发生后,

MiniGUI将事件转换为一个消息,并将消息放入目标程序的消息队列之中。应用程序现在的任务就是执行消息循环代码,不断地从消息队列中取出消息,进行处理。//消息循环while(GetMessage(&Msg,hMainWnd)){

TranslateMessage(&Msg);

DispatchMessage(&Msg);

}程序架构6、窗口过程函数staticintHelloWinProc(HWNDhWnd,intmessage,WPARAMwParam,LPARAMlParam)

{

HDChdc;

switch(message){

//创建时发送的消息,用来做初始化处理

caseMSG_PAINT:

hdc=BeginPaint(hWnd);

TextOut(hdc,100,100,“Hello,MiniGui!”);//屏幕输出

EndPaint(hWnd,hdc);

return0;//表明不需要进入默认处理函数中//结束时一些处理函数,单击窗口右上角关闭按钮,发送MSG_CLOSE消息,主要销毁主窗口和发送quit消息以退出消息循环

caseMSG_CLOSE:

DestroyMainWindow(hWnd);

PostQ

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论