windows下的透明窗口有不少的實(shí)現(xiàn)方法,最簡(jiǎn)單的當(dāng)屬空畫刷啦,但是這篇文章將的是用layer window(分層窗口)來(lái)實(shí)現(xiàn)透明窗口。 見過(guò)Vista/Win7中窗口漂亮的半透明特效嗎?用layer window可以輕松實(shí)現(xiàn),而且其實(shí)layer window在古老的windows2000中就已經(jīng)實(shí)現(xiàn)啦。基本不用考慮平臺(tái)的問題。
layer window其實(shí)就是擁有WS_EX_LAYERED風(fēng)格的窗口,layer window有兩種創(chuàng)建方法,先天的、后天的。
先天的就是指創(chuàng)建時(shí)就指定WS_EX_LAYERED風(fēng)格。只要在CreateWindowEx函數(shù)中的第一個(gè)參數(shù)中加上WS_EX_LAYERED即可。 后天的就是指創(chuàng)建完窗口再加入WS_EX_LAYERED風(fēng)格。
添加完WS_EX_LAYERED風(fēng)格后還不能立刻就有效果,還要設(shè)置一些透明參數(shù)才能生效。 設(shè)置透明效果有兩個(gè)函數(shù),SetLayeredWindowAttributes和UpdateLayeredWindow,通常使用前一個(gè)就夠了。 SetLayeredWindowAttributes函數(shù)用來(lái)設(shè)置窗口的透明參數(shù),第一個(gè)參數(shù)是窗口句柄,第二個(gè)是關(guān)鍵色,至于什么是關(guān)鍵色,后面會(huì)講,第三個(gè)是透明度,第四個(gè)是透明方式。 SetLayeredWindowAttributes可以設(shè)置兩種透明渲染模式,關(guān)鍵色透明和透明度,選擇那種方式取決于第四個(gè)參數(shù)。 1. LWA_COLORKEY代表使用關(guān)鍵透明色來(lái)渲染,此時(shí)第二個(gè)參數(shù)會(huì)起作用,第二個(gè)參數(shù)是一個(gè)rgb顏色值,可以通過(guò)RGB宏生成,當(dāng)設(shè)置了此模式時(shí),此窗口上所有和這個(gè)關(guān)鍵顏色值相同的地方會(huì)變透明。同時(shí)注意,透明的地方無(wú)法被鼠標(biāo)點(diǎn)擊,鼠標(biāo)會(huì)直接點(diǎn)擊透明窗口下面的地方。 2. LWA_ALPHA代表使用整體透明度來(lái)渲染,此時(shí)第三個(gè)參數(shù)會(huì)起作用。第三個(gè)參數(shù)是一個(gè)字節(jié)的整數(shù),0~255表示透明度,0完全透明,255不透明。用這種方式可以做出win7的玻璃半透明效果,注意窗口的所有地方都會(huì)透明,包含標(biāo)題欄,當(dāng)時(shí)我初學(xué)的時(shí)候,設(shè)了透明度為1,半天沒找到窗口在哪,以為代碼寫錯(cuò)了。不過(guò)窗口是可以被鼠標(biāo)點(diǎn)擊的。 3還有一種方式就是LWA_ALPHA|LWA_COLORKEY,兩種的特性都會(huì)有。 這就是透明參數(shù)的基本設(shè)置,還有一些復(fù)雜的設(shè)置可以使用UpdateLayeredWindow函數(shù),通常用于處理本身的會(huì)面中有透明通道的一些設(shè)置和對(duì)透明位置的一些控制。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注