【讨论】GDI+,分层窗口(LayeredWindow)的技术特点以及应用
豆腐 2004-06-29 08:39:13 最近在作一个界面换肤的工程,用传统的HOOK+子类化的操作,很多依赖WM_PAINT来维护窗口的外观,昨天一个朋友给推荐了一下层窗口,试用一下,果然不错!
win2000以后的版本在用户界面方面包括了几个重大的改进,譬如有阴影的鼠标,渐入的工具条快速提示,透明的窗口,平滑的窗口变化等等.这些变化都可以归结为用户对"渐变"的需求远远要比传统的"跃进式"要感兴趣的多,很显然,"渐变"比"跃进式"的用户界面要温和的多.
其实是因为WIN2000采用了一种GDI,以前叫GDI2K,现在叫GDI+,是一种新型的图形设备接口,它的主要特点在于它那个创建全新的用户桌面体系,能够轻易的完成二维或三维的图形处理,同同时也提供了增强的图形处理技术,如alpha blending,纹理,贴图,增强的文本以及图片显式技术.实际上GDI+主要的特色就就在于强调通过硬件加速来达到靓号的视觉感受!
透明的窗口,淡入淡出,这些在很大程度上引入了多分层窗口的应用!
分层窗口主要作用以及特点如下:
分层窗口采取"合成"(compose)的方式来绘制,【系统占用资源低】,【支持窗口平滑变化】
分层窗口可以是【半透明】或者【透明】的
分层窗口可以是【任意形状】,支持【变形操作】
我们知道,在传统的windows98或者NT下面,窗口外观发生变化(该窗口被其它窗口覆盖,窗口大小发生变化)时,应用程序会自动维护窗口的外观,而这种维护,是在编程中加入了对WM_PAINT之类的消息响应.如果桌面窗口的外观频繁的发生变化,那么,所有的窗口都回去响应"WM_PAINT"消息,以保持窗口自身的外观,这样就使得每个窗口都在进行重绘操作,这样就自然加重了操作系统的负担,当系统忙不过来的时候,你会发现,有些窗口忧郁在重绘过程中就产生了"抖动"~~~大大的影响了整个桌面的外观.
分层窗口的出现使得上面的问题得到了解决,它的特点就在于,它将窗口的绘制操作进行了重新定义::【由操作系统(而不是应用程序),完成重绘操作,完成的方式是"合成":将窗口看成一副位图,窗口外形的变化只是"位图"的变化!而不需要非得通过对WM_PAINT消息来进行.这样就能够保证分层窗口在概念上包括两层含义:与传统相比,这种窗口从外观上看起来恩奇怪(它可以是透明或者半透明的,或者是异性的);二是【重定向】:对窗口的重绘操作不需要你手工添加代码来维护,系统会自动将重绘操作在后台完成!
分层窗口实际上一种在WIN2000下能够自动地与非活动窗口进行合成的一种窗口.