以文本方式查看主题

-  曙海教育集团论坛  (http://peixun0.cn/bbs/index.asp)
--  VxWorks 应用开发  (http://peixun0.cn/bbs/list.asp?boardid=38)
----  基于嵌入式操作系统VxWorks的图形界面开发  (http://peixun0.cn/bbs/dispbbs.asp?boardid=38&id=1945)

--  作者:wangxinxin
--  发布时间:2010-12-1 11:03:03
--  基于嵌入式操作系统VxWorks的图形界面开发

图片点击可在新窗口打开查看

  图2 窗口互锁流程图

  图形界面开发技术

  程序总体框架

  几乎所有实际应用方面的编程都有一个框架可以遵循,利用WindML的图形开发也不例外。虽然,它限制了一些有个性和特色的程序的出现,但它毕竟能够减少编程时的错误,而且能够提高编程的效率。图形开发设计的总体框架主要是调用uglInitialize完成 UGL (通用图形库)初始化,设备驱动装载,创建图形环境变量完成对所有资源的释放,并退出。

  基本操作简要介绍

  二维图形库

  ● 绘图基本要素:基本的图形是由简单的几何要素组成的,包括椭圆、直线、多边形。

  ● 文字渲染和字体管理:提供了一种简便的方法将文本信息绘制到显示设备上。

  ● 位图管理: API提供了一个简便的机制用来创建和渲染单色、彩色和透明位图图像至显示设备。

  ● 图形指针管理:指针是一个由应用程序创建的,并由指针设备定位到屏幕上的图像。它支持254种颜色以及透明色 和反向像素。

  ● 批量绘图:进行绘图操作,能够确认绘图操作的完整性,使屏幕闪烁最小,并且能最有效地利用系统资源。

  ● 图形环境变量:包含了图画特征的所有信息,比如绘图的基本要素、默认位图、裁剪与观察区尺寸、光栅模式和文字渲染用的字体等。

  ● 颜色管理:在多种显示模式或多种显示设备类型下,利用颜色管理API能很方便地进行一些应用软件开发,对应用软件进行优化。

  ● 双缓冲技术:主要是为了减少高频率或大区域刷新时的屏幕闪烁。利用API,可以先将对象绘制入一个未显示的页(或缓冲),当绘图结束时再将这个页显示出来

 

事件处理— 一般包括鼠标、触摸屏、键盘和用户自定义事件等的处理。

  区域和窗口管理-包括区域和裁剪;以及窗口管理。

  多媒体— 包括视频、音频和JPEG等。

  资源管理— 包括常规资源、内存管理、设备驱动注册表、重叠面、驱动信息与管理。

  扩展功能的实现

  在实际编写程序时,总会遇到这样或那样的问题,有些可以通过已定义的功能函数来解决,而另一些不能直接解决的,我们通常会编写一段程序对现有功能进行扩展(利用已有的函数,通过特定的算法,完成特定功能)。在利用WindML组件进行编程时,我所遇到的几个实际问题,都是通过功能扩展来解决的。下面将对这些问题进行详细讨论:

  指针延时自动隐藏

  通过循环读取事件队列中的事件信息,对类型是指针的事件进行处理来完成鼠标消息的响应。但是,在此之前必须对鼠标指针的位置、图像以及大小等进行初始化,并将其显示在显示器上。然后,在事件处理时,如果通过函数uglEventGet得不到事件信息,即该函数返回状态为UGL_STATUS_Q_EMPTY时,若此时满足某特定条件,或者说系统已经空闲一定时间,那么,程序将调用函数uglCursorOff隐藏指针,直到有鼠标事件进入事件队列并被得到时,调用函数 uglCursorOn显示指针。流程图见图1。

  窗口互锁

  窗口互锁就是要求整个屏幕中最多只有一个窗口显示,要想显示另一个窗口必须在该窗口关闭后才能进行。WindML组件自身没有提供这种互锁功能,组件中的窗口可以重叠、嵌套,理论上,只要系统提供的资源足够,那么屏幕上可以显示无限个窗口。流程图见图2。

  屏幕取词技术

  在WindML组件中,所有的图像、文字、窗口等都是以像素的形式画到显示设备上的。因此,一旦将对象绘制到显示设备上,就不可能用给定的函数得到某个区域中的对象。这样,如果需要用户输入信息,然后再得到这些信息时,问题就出现了:用户输入信息可以通过响应键盘事件,然后刷新相应显示区域来完成;但此时得到相应显示区域内的信息就十分棘手了,因为WindML组件中没有提供实现该功能的函数。现在就必须对WindML进行功能扩展以实现屏幕取词功能。