miniGUI演讲稿.ppt

上传人:b****2 文档编号:2605233 上传时间:2022-11-03 格式:PPT 页数:32 大小:3.04MB
下载 相关 举报
miniGUI演讲稿.ppt_第1页
第1页 / 共32页
miniGUI演讲稿.ppt_第2页
第2页 / 共32页
miniGUI演讲稿.ppt_第3页
第3页 / 共32页
miniGUI演讲稿.ppt_第4页
第4页 / 共32页
miniGUI演讲稿.ppt_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

miniGUI演讲稿.ppt

《miniGUI演讲稿.ppt》由会员分享,可在线阅读,更多相关《miniGUI演讲稿.ppt(32页珍藏版)》请在冰豆网上搜索。

miniGUI演讲稿.ppt

MiniGUI的简介制作人:

蒙滨2011.05.6mG3d是一个为MiniGUI的应用程序提供3D接口的组件mGi是MiniGUI的输入法组件,该组件目前提供了软键盘输入法和手写输入法框架mGPlus组件是对MiniGUI图形绘制接口的一个扩充和增强,主要提供对二维矢量图形和高级图形算法的支持,如路径、渐变填充和颜色组合等。

主窗口双缓冲区主窗口双缓冲区当MiniGUI3.0的主窗口具有双缓冲区时,我们可以在自定义缓冲区中获得整个主窗口的渲染结果。

在此基础上,我们可以利用高级2D图形接口或者3D图形接口获得主窗口的各种特殊显示效果,如推拉切换、翻页切换、卷曲效果等等。

外观渲染器外观渲染器观渲染器为用户提供了多种风格的主窗口和控件界面外观风格。

应用程序在这几种风格的窗口界面之间进行切换非常容易,只要在创建窗口时传递不同的参数,你就可以变换出不同风格的界面。

MiniGUI3.0实现了桌面的可定制MiniGUI3.0实现了桌面的可定制。

通过桌面的外部编程接口,用户可以在桌面放置图标并响应桌面事件,实现类似Windows桌面的界面效果。

除此之外,MiniGUI3.0还增强了透明控件的实现,使之效率更高,且不依赖于控件的内部实现代码MiniGUI的背景MiniGUI的特点MiniGUI的基本机制MiniGUI的简单介绍MiniGUI的背景MiniGUI是北京飞漫公司创办的多窗口图形用户界面,它以其小巧,可移植性强,性能优良,而且支持中文GB2312和BIG5字库,所以受到了国内嵌入式行业的一致认可。

MiniGUI开源的GPL授权版本号是1.6.10,从MiniGUI2.0.4开始,MiniGUI被重新编写并使用了商业授权,现在的版本是3.0,并有3D图形接口还有各种现成的开发组件如浏览器mdophin,嵌入式java支持的mpeer等。

MiniGUI的各种组件小巧可移植性强可配置性高MiniGUI的应用优点MiniGUI从一开始的设计方向就是嵌入式设备,所以在很多方面都会为嵌入式设备的局限多考虑一点.MiniGUI的静态存储随配置选项的不同而不同,启动后,它的库最小可裁剪到500k左右。

这是QT/embeded无法做到的。

小巧性MiniGUI的可移植性很好,它支持Linux/uClinux、eCos、uC/OS-II、VxWorks、ThreadX、Nucleus、pSOS、OSE等操作系统和数十种SoC芯片,已验证的硬件平台包括ARM-basedSoCs、MIPSbasedSoCs、IA-basedSoCs、PowerPC、M68K(DragonBall/ColdFire)、Intelx86等等含有MMU(内存管理单元)的32位处理器架构之上,而且运行在这些平台经过验证都很稳定。

可移植性MiniGUI可配置性也很高,MiniGUI可以被配置成基于线程MiniGUI-Threads运行模式还是基于进程的MiniGUI-Processes运行模式,或者只是最简单的MiniGUI-Standalone运行模式,此外它还能配置字体类型,字符集,图像支持格式,所需要的控件类,整体风格,等等。

可配置性MiniGUI的体系结构从整体结构上看,MiniGUI是分层设计的,在最底层,GAL(图形抽象层)和CAL(输入抽象层)提供底层图形接口以及鼠标和键盘的驱动,而Pthread(POSIXthread)是用于提供内核级线程支持的C函数库。

中间层是MiniGUI的核心层,其中包括了窗口系统必不可少的各个模块。

最顶层的API是提供给用户的编程接口。

如图所示:

图形抽象层和输入抽象层图形抽象层(GAL)和输入抽象层(IAL)大大提高了MiniGUI的可移植性,并将底层图形设备和上层接口分离开来。

抽象层的概念类似Linux内核虚拟文件系统的概念。

它定义了一组不依赖于任何特殊硬件的抽象接口,所有顶层的图形操作和输入处理都建立在抽象接口之上。

而用于实现这一抽象接口的底层代码称为“图形引擎”或“输入引擎”,类似操作系统中的驱动程序。

利用GAL和IAL,MiniGUI可以在许多已有的图形函数库上运行,比如SVGALib和LibGGI。

并且可以非常方便地将MiniGUI移植到其他POSIX系统上,只需要根据抽象层接口实现新的图形引擎即可。

在基于Linux的系统上,可以在LinuxFrameBuffer驱动程序的基础上建立通用的MiniGUI图形引擎。

一般而言,基于Linux的嵌入式系统均会提供FrameBuffer支持,这样私有图形引擎可以运行在一般的PC上,也可以运行在特定的嵌入式系统上。

相比图形来讲,将MiniGUI的底层输入与上层相隔显得更为重要。

在基于Linux的嵌入式系统中,图形引擎可以通过FrameBuffer而获得,而输入设备的处理却没有统一的接口。

在PC上,通常使用键盘和鼠标,而在嵌入式系统上,可能只有触摸屏和为数不多的几个键。

在这种情况下,提供一个抽象的输入层,就显得格外重要。

MiniGUI的基本模式MiniGUI-ThreadsMiniGUI-ProcessesMiniGUI-StandaloneMiniGUI三种运行模式在这个模式下MiniGUI是基于线程运行,支持多窗口。

从本质上讲,每个线程有一个消息队列,消息队列是实现线程数据交换和同步的关键数据接口。

一个线程向消息队列中发送消息,而另一个线程从这个消息队列中获取消息,同一个线程中创建的窗口可共享同一个消息队列。

利用消息队列和多线程之间的同步机制,可以实现微客户/服务器机制。

多线程有其一定的好处,但不方便的是不同的线程共享了同一个地址空间,因此,客户线程可能会破坏系统服务器线程的数据,但有一个重要的优势是,由于共享地址空间,线程之间就没有额外的数据复制开销。

由于MiniGUI是面向嵌入式或实时控制系统的,因此,这种应用环境下的应用程序往往具有单一的功能,从而使得采用多线程而非多进程模式实现图形界面有了一定的实际意义MiniGUI-threads模式微客户/服务器结构在多线程环境中,与多进程间的通讯机制类似,线程之间也有交互和同步的需求。

比如,用来管理窗口的线程维持全局的窗口列表,而其他线程不能直接修改这些全局的数据结构,而必须依据“先来先服务”的原则,依次处理每个线程的请求,这就是一般性的客户/服务器模式。

MiniGUI利用线程之间的同步操作实现了客户线程和服务器线程之间的微客户/服务器机制。

微客户/服务器机制的核心实现主要集中在消息队列数据结构上。

如,MiniGUI中的desktop微服务器管理窗口的创建和销毁。

当一个线程要求desktop微服务器建立一个窗口时,该线程首先在desktop的消息队列中放置一条消息,然后进入休眠状态而等待desktop处理这一请求,当desktop处理完成当前任务之后,或正处于休眠状态时,它可以立即处理这一请求,请求处理完成时,desktop将唤醒等待的线程,并返回一个处理结果。

当MiniGUI在初始化全局数据结构以及各个模块之后,MiniGUI要启动几个重要的微服务器,它们分别完成不同的系统任务;desktop用于管理MiniGUI窗口中的所有主窗口,包括建立、销毁、显示、隐藏、修改Z-order、获得输入焦点等等。

parsor线程用来从IAL中收集鼠标和键盘事件,并将收集到的事件转换为消息而邮寄给desktop服务器。

timer线程用来触发定时器事件。

该线程启动时首先设置Linux定时器,然后等待desktop线程的结束,即处于休眠状态。

当接收到SIGALRM信号时,该线程处理该信号并向desktop服务器发送定时器消息。

当desktop接收到定时器消息时,desktop会查看当前窗口的定时器列表,如果某个定时器过期,则会向该定时器所属的窗口发送定时器消息。

关键数据结构消息队列在MiniGUI中,使用消息驱动作为应用程序的创建构架。

MiniGUI支持如下几种消息的传递机制。

这些机制为多线程环境下的窗口间通讯提供了基本途径:

1.通过PostMessage发送。

消息发送到消息队列后立即返回。

这种发送方式称为“邮寄”消息。

如果消息队列中的邮寄消息缓冲区已满,则该函数返回错误值。

2.通过PostSyncMessage发送。

该函数用来向不同于调用该函数的线程消息队列邮寄消息,并且只有该消息被处理之后,该函数才能返回,因此这种消息称为“同步消息”。

3.通过SendMessage发送。

该函数可以向任意一个窗口发送消息,消息处理完成之后,该函数返回。

如果目标窗口所在线程和调用线程是同一个线程,该函数直接调用窗口过程,如果处于不同的线程,则利用PostSyncMessage函数发送同步消息。

4.通过SendNotifyMessage发送。

该函数向指定的窗口发送通知消息,将消息放入消息队列后立即返回。

由于这种消息和邮寄消息不同,是不允许丢失的,因此,系统以链表的形式处理这种消息。

5.通过SendAsyncMessage发送。

利用该函数发送的消息称为“异步消息”,系统直接调用目标窗口的窗口过程。

在MiniGUI中,一个创建了窗口的线程一般拥有一个消息队列MiniGUI线程的通讯机制MiniGUI的通信机制类似于win32的消息机制,对于运行在线程模式的MiniGUI版本,线程间的消息传递模型如下:

Desktop线程Event线程Timer线程应用主线程其它应用线程微服务器MiniGUI-ProcessesMiniGUI-Processes是每个程序都是一个进程,每个进程可以创立多个窗口,实现多进程窗口系统。

这个模式适合具有完整的uxix特性的系统,比如linux。

这个模式有着良好的地址保护,窗口崩溃不会影响MiniGUI的运行,这是thread模式无法提供的。

多线程的程序对程序员要求较高,要考虑函数的线程安全问题,考虑是否可重入。

对于进程版的MiniGUI来说,应用程序的消息传递通过套接字来进行,相应的模型是:

程序(进程)1程序(进程)2程序(进程)3服务器程序套接字鼠标键盘MiniGUI-Standalone模式MiniGUI-Standalone模式是不需要多线程和多进程支持的,可以以独立的方式运行的。

这个模式适合运行在功能单一的应用场合。

MiniGUI在Linux下安装:

libMiniGUI-1.6.10.tar.gzMiniGUI的源码包MiniGUI-res-1.6.10.tar.gzMiniGUI的资源包,包括基本的字符,鼠标,图标等mg-samples-1.6.10.tar.gzMiniGUI的一些基本的例子。

qvfb-1.1.tar.gzqvfb源码包jpegsrc.v6b.tar.gz支持jpeg的源码包编译的时候可能需要x11和qt3.3以上qt4以下版本的支持,只要下载对应的源码包就可以了。

Helloworld程序:

#include#include#include#include#includestaticintHelloWinProc(HWNDhWnd,intmessage,WPARAMwParam,LPARAMlParam)HDChdc;switch(message)caseMSG_PAINT:

hdc=BeginPaint(hWnd);TextOut(hdc,60,60,Helloworld!

);EndPaint(hWnd,hdc);return0;caseMSG_CLOSE:

DestroyMainWindow(hWnd);PostQuitMessage(hWnd);return0;returnDefaultMainWinProc(hWnd,message,wParam,lParam);intMiniGUIMain(intargc,constchar*argv)MSGMsg;HWNDhMainWnd;MAINWINCREATECreateInfo;#ifdef_MGRM_PROCESSESJoinLayer(NAME_DEF_LAYER,helloworld,0,0);#endifCreateInfo.dwStyle=WS_VIS

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1