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
函數,通常用于處理本身的會面中有透明通道的一些設置和對透明位置的一些控制。
新聞熱點
疑難解答