首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 单元电路介绍 > 其它电路
基于MiniGUI的数字加密电话系统GUI设计
来源:本站整理  作者:佚名  2011-08-21 20:05:42





3 关键问题的解决方法
3.1 动画抖动问题的解决
    产生动画抖动的主要原因是,用animation控件实现动画时,频繁地产生MSG_PAINT消息,加重了屏幕刷新的请求。MiniGUI通过判断窗口是否含有无效区域来确定是否需要重绘窗口。如果需要重绘就向应用程序发送MSG_PAINT消息。窗口的重绘任务需由应用程序自己完成,因为MiniGUI不保存被覆盖区域的内容。MiniGUI的窗口在响应MSG_PAINT消息的时候进行复杂的图形处理,尤其是在刷新时,对图像的擦除和重写造成了图像颜色的反差。当绘图消息的响应很频繁时,这种反差也就越发明显,于是我们就看到了动画抖动的现象。为了解决动画抖动的问题,系统采用了双缓冲技术和多个图片交替显示的方法。并在实际应用中证明了该方法是行之有效的。双缓冲技术要比直接操作显存速度更快,因此可以解决抖动现象。
    采用双缓冲技术实现动画的基本思路是这样的,首先在系统内存中建立一个类似显示内存的内存设备上行文,然后将待显示图片填充到该内存设备上行文中,最后再通过位拷贝方式复制到显示内存中。为了达到动画的效果,将多个图片循环显示,即设定定时器和静态变量,每当定时器触发时,根据静态变量的值显示不同的图片,静态变量由0到MAX循环。实现动画的详细流程如图4所示。定时器的时间间隔和图片的数量可以根据具体情况任意调整。本系统的主显示区动画采用这种方法实现后,动画效果流畅,不再有抖动现象。

d.jpg


3.2 功能选择界面闪烁问题的解决
    功能选择界面闪烁的主要原因是屏幕内容过多,刷新负载过大。本系统采用双缓冲技术和MiniGUI.cfg配置文件的设置方法,实现只刷新屏幕的局部,解决了功能选择界面闪烁问题。每次按上下左右键或关闭功能窗口时,用以下3个步骤实现重绘屏幕无效区域(以图3为例)。
    ①A区用小图标恢复,用函数StretchBlt(hdcmem,0,0,0,0,hdc,WIN_LEFT,WIN_TOP,WIDTH,HIGHT,(DWORD)0)实现,其中hdcmem是内存设备上下文,是用CreateCompatibLEDCEx()函数创建的。该内存设备上行文中已经存有图3下图中的A区域信息(第一次是在窗口的MSG_ CREATE消息中保存的,第二次开始是在第二步骤保存的)。
    ②将B的图片区域(小图片)复制到内存设备上下文,用函数StretchBlt(hdc,WIN_LEFT,WIN_TOP,WIDTH,HIGHT,hdcmem,0,0,0,0,(DWORD)0)实现。
    ③B区域的图片放大显示,通过函数FillBoxWithBitmap(hdc,WIN_LEFT,WIN_TOP,WIDTH,HIGHT,DESKIMAGE,&bitmap)实现。
    其中,WIN_LEFT、WIN_TOP、WIDTH和HIGHT分别表示图片放大显示区域的左、上坐标和宽、高。左、上坐标的定位公式如下:
    WIN_LEFT=水平基准坐标+(i%DESKCOLS)×(BLTWIDTH+水平间隔)
    WIN_TOP=垂直基准坐标+(i/DESKCOLS)×(BLTHIGHT+垂直间隔)
    式中,i表示第几个图片,DESKCOLS表示每一行的图片个数,BLTWIDTH和BLTHIGHT各表示图片区域的宽和高。为了减少屏幕刷新负载,不在MSG_PAINT消息中刷新背景,而是用MiniGUI.cfg配置文件中的bgpICture参数指定背景图,并在指定的目录中存放背景图文件。该参数在MiniGUI的4种渲染器中都有,即在不同的渲染器中,都可以用该方法,无需用代码去实现背景图的刷新。

结语
    本文详细地描述了基于MiniGUI的嵌入式系统用户界面关键问题的解决方案,即无抖动动画的实现方案和功能选择界面闪烁问题的解决方案。当需要实现动画,而且动画文件较大时,可以采用双缓冲技术解决动画抖动的问题。但是双缓冲技术需要额外的内存设备上下文,所以简单的动画效果可以用SendMessage(窗口句柄,STM_SETIMAGE,pngmap,0)函数更换图片的方式实现较好。

上一页  [1] [2] [3] 

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)
Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:368,390.60000 毫秒