UpdateLayeredWindow函数是WIN32API里功能非常强大的一个函数。通过在内存DC上作画,然后把该DC传递给UpdateLayeredWindow,系统就会托管后面的图像储存、压缩、渲染等工作,并且所有的绘图工作都由UpdateLayeredWindow来执行,也就是说你在内存DC上画了什么,就会显示出来什么[2]。 UpdateLayeredWindow改变了以往窗体绘制方式,由于每次绘图都要由UpdateLayeredWindow来操作,所以每次我们都要画出当前的整个应用程序界面,这就导致每次都要重新绘制整个窗体。这样就引起了我们引言中讲到的CPU占用高的问题。正是由于这个问题,当今的所有开源界面库全部都没有基于UpdateLayeredWindow来实现界面,当然也就无法实现异形,所以对于异形窗体,如何实现局部刷新是必须要解决的。 2.双界面合成方法模拟实现局部刷新 通过上节的讲解,全部刷新是由于UpdateLayeredWindow自身实现的问题,所以我们无法更改,所以我们只有采用模拟的方法来实现局部刷新。 如图一所示,原界面上有三个按钮控件,均为椭圆状,虚线框表示每个控件的大小,实际并不存在,这里要实现的效果是,当用户点击第一个控件时,将其改变成另一样式(菱形),双界面合成方法实现局部刷新的过程如下: 2.1首先,保存原界面;(步骤一) 众所周知,在WINDOWS程序中,绘图DC是与画布相关联的,只要我们的画布不销毁,界面就不会改变。所以,我们先保存上次的画布,为合成最新的画布做准备。 2.2创建一个临时画布,并在其上画出当前最新的控件样式及其背景;(步骤二)
2.4将最新绘制的控件及其背景根据更新区域大小进行裁剪;(步骤四) |