實現半透明窗口

在windows7的系統中,窗口的標題欄和邊框的,任務欄等等地方的半透明效果所吸引,那麼如果我們作爲軟件開發的學習者,如果我們自己要開發一個可以半透明的窗口界面,應當如何呢,下面我就爲大家講解一下。我這裏呢,要講兩個方法。

第一個方法,就是是使用LAYERED窗口,這個樣式的窗口不經能爲我們帶來幫透明的窗口效果,而且呢,這中窗口樣式,還可以幫助我們建立不規則的窗口,平時我們建立的窗口都是方形的,但是使用這種窗口樣式呢,我們就可以建立各種複雜的窗口出來,而且只有在有像素的地方纔可以接收鼠標消息,沒有像素的地方就穿透了,由這個窗口下面的窗口接收到鼠標消息。ok,說的有點遠了,言歸正傳,接着說LAYERED窗口,我們要建立這樣的窗口呢,就得用CreateWindowEx函數創建窗口,因爲這個函數我們可以指定擴展樣式,用了這個函數之後,我們在擴展樣式中,指明WS_EX_LAYERED,就可以創建layered窗口,但是在windows7及以前的系統呢,這個樣式不能用於子窗口,只能用於主窗口。使用了這個樣式之後,那麼你就要繪製界面了,這個界面的上的所有元素,都要你自己繪製,具體的繪製過程這裏不討論,這個問題,我在以後的文章中會詳細說明。在msdn上也有說明這種窗口樣式的特徵,不過沒有具體的代碼和示例程序,一不小心,就不成功。

第二個方法就是使用桌面窗口管理器,也可以達到半透明的效果,而且呢,還有個特定,那就是背景模糊,透過這個窗口看窗口後面的內容,有鏡面效果。同時你再使用桌面管理器中的將標準框架(邊框)擴展到客戶區,配合背景模糊效果的使用呢,就可以達到背景和邊框融合爲一體,效果很不錯,另外,你在設置顏色的時候,要注意,否則,就會和背面的顏色混合,造成我們窗口的內容不清楚。最好顏色不要太深。或是設置爲沒有顏色,直接透明,模糊,因爲這樣不會影響到我們窗口上文字的閱讀效果。注意的是,這個只能用於vista及以後的系統,而且系統必須開啓了aero效果,如果是家庭版是沒有這個效果的,那麼也達不到效果。下面給出效果圖:


上面這幅圖中呢,中間的播放器界面的窗口界面呢,使用的是layered窗口,由於我不是搞美術出生,所以界面畫的很醜,呵呵,由於使用layered窗口,就不能在這個窗口上建立我們的按鈕,編輯框等等我們平常使用的控件,我這裏的如pause(暫停)等按鈕,其實是邏輯窗口,也叫Wondowless,爲了我能使用listview控件顯示歌單,我就由建立了一個線程,在這個線程中我創建了一個對話框,當中添加listview控件,然後呢,就在這個窗口中,我使用桌面管理器(DWM)實現了窗口的透明化,鏡面模糊,邊框和客戶區一體的效果,最後還有一個小窗口,裏面的滑塊是用來調節主窗口,也就是播放窗口的透明度的。

文章前面我說了有關使用DWM時的顏色問題,這裏我用了顏色,但是這樣,不好,主要表現在會和這個窗口下面的背景產生混合,影響文字的閱讀性,這裏我用的淺,影響不明顯。我建議將顏色值設爲RGB(0,0,0,)這樣就可以得到以下的效果


這樣就很好,完全融合起來了。


發佈了46 篇原創文章 · 獲贊 5 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章