时间:2014-03-07 14:28 文章来源:http://www.lunwenbuluo.com 作者:魏振钢张恩伟 点击次数:
摘要:通过对现存界面库的分析,解释当前异形窗体的创建与刷新的难点,及刷新时CPU占用率高的问题,通过对updateLayeredwindow接口的深度剖析,阐述了利用双界面合成的方法来模拟局部刷新。采用先对局部窗体重绘,然后与原界面合成的方法,大量减小了刷新时的重绘量,从而大幅度减轻了CPU的占用率。
关键词:界面异形窗体updateLayeredwindow局部刷新
中图分类号:TP3011.11文献标识码:A文章编号:1003-9082(2014)02-0001-02
一、引言
随着计算机的发展,当今用户对应用软件不再仅仅满足于功能的完善,而且对用户界面友好性、美观性要求越来越高。所以,以往的桌面应用程序开发并不能满足这些界面开发要求,这就致使越来越多的界面库的涌现,而现今的界面库大都基于DirectUI的设计思想[1],但由于原有窗体是规则的,所以根本无法实现异形窗体。随着微软分层窗体的设计思想及UpdateLayeredWindow函数的出现,异形窗体的实现才真正成为可能。但由于UpdateLayeredWindow本身的特性导致每次都必须全部重绘整个程序界面,所以即便是一个像素的改变,都将导致整个窗体的刷新,这对于CPU的占用是非常巨大的,尤其在大型软件中,这将是灾难性的。
本文在解析分层窗体和UpdateLayeredWindow的基础上,利用双界面合成的方法模拟实现异形界面的局部刷新,彻底解决了异形窗体的刷新问题,为DirectUI实现异形窗体扫除了一大障碍,为界面库的研究提供了新方法,新思路。
二、异形窗体与局部刷新技术
1.异形窗体简介
1.1分层窗体简介
在创建窗体时,拥有扩展属性WS_EX_LAYERED的窗体就是分层窗体了。通过分层窗体,我们可以实现异形、具有alpha值的窗体,另外还能为窗体实现动作,解决了以往的纯静态窗体的现实。对于分层窗体的绘图机制,可以有两种选择,其一是采用以往的WM_PAINT消息响应机制及局部刷新技术,但这种方法无法实现异形窗体。其二就是使用UpdateLayeredWindow函数,将绘图工作由系统托管,用户只需告诉系统需要绘制哪些图像;
1.2UpdateLayeredWindow函数简介及现存问题
UpdateLayeredWindow函数是WIN32API里功能非常强大的一个函数。通过在内存DC上作画,然后把该DC传递给UpdateLayeredWindow,系统就会托管后面的图像储存、压缩、渲染等工作,并且所有的绘图工作都由UpdateLayeredWindow来执行,也就是说你在内存DC上画了什么,就会显示出来什么[2]。
UpdateLayeredWindow改变了以往窗体绘制方式,由于每次绘图都要由UpdateLayeredWindow来操作,所以每次我们都要画出当前的整个应用程序界面,这就导致每次都要重新绘制整个窗体。这样就引起了我们引言中讲到的CPU占用高的问题。正是由于这个问题,当今的所有开源界面库全部都没有基于UpdateLayeredWindow来实现界面,当然也就无法实现异形,所以对于异形窗体,如何实现局部刷新是必须要解决的。
联系方式
随机阅读
热门排行