windows
下的透明窗口有不少的实现方法,最简单的当属空画刷啦,但是这篇文章将的是用layer window
(分层窗口)来实现透明窗口。 见过Vista/Win7
中窗口漂亮的半透明特效吗?用layer window
可以轻松实现,而且其实layer window
在古老的windows2000
中就已经实现啦。基本不用考虑平台的问题。
layer window
其实就是拥有WS_EX_LAYERED
风格的窗口,layer window
有两种创建方法,先天的、后天的。
先天的就是指创建时就指定WS_EX_LAYERED
风格。只要在CreateWindowEx
函数中的第一个参数中加上WS_EX_LAYERED
即可。 后天的就是指创建完窗口再加入WS_EX_LAYERED
风格。
添加完WS_EX_LAYERED
风格后还不能立刻就有效果,还要设置一些透明参数才能生效。 设置透明效果有两个函数,SetLayeredWindowAttributes
和UpdateLayeredWindow
,通常使用前一个就够了。 SetLayeredWindowAttributes
函数用来设置窗口的透明参数,第一个参数是窗口句柄,第二个是关键色,至于什么是关键色,后面会讲,第三个是透明度,第四个是透明方式。 SetLayeredWindowAttributes
可以设置两种透明渲染模式,关键色透明和透明度,选择那种方式取决于第四个参数。 1. LWA_COLORKEY
代表使用关键透明色来渲染,此时第二个参数会起作用,第二个参数是一个rgb
颜色值,可以通过RGB
宏生成,当设置了此模式时,此窗口上所有和这个关键颜色值相同的地方会变透明。同时注意,透明的地方无法被鼠标点击,鼠标会直接点击透明窗口下面的地方。 2. LWA_ALPHA
代表使用整体透明度来渲染,此时第三个参数会起作用。第三个参数是一个字节的整数,0~255表示透明度,0完全透明,255不透明。用这种方式可以做出win7的玻璃半透明效果,注意窗口的所有地方都会透明,包含标题栏,当时我初学的时候,设了透明度为1,半天没找到窗口在哪,以为代码写错了。不过窗口是可以被鼠标点击的。 3还有一种方式就是LWA_ALPHA|LWA_COLORKEY
,两种的特性都会有。 这就是透明参数的基本设置,还有一些复杂的设置可以使用UpdateLayeredWindow
函数,通常用于处理本身的会面中有透明通道的一些设置和对透明位置的一些控制。
新闻热点
疑难解答