C++語言中的毛玻璃效果
本文將演示在基于Windows Vista的普通Windows應(yīng)用程序及對(duì)話框程序中,如何利用C++語言來生成Aero毛玻璃效果,此處使用的是Beta 2版本的Vista及Windows SDK,現(xiàn)在就讓大家看一下震撼的效果吧。
一些API在細(xì)節(jié)上會(huì)有所變化。另外,文中沒有使用MFC,全部例子用WTL 7.5生成,其可在http://wtl.sourceforge.net/下載得到,雖然此處使用的是Visual C++ 2003,但Visual C++ 2005也類似。#t#
Aero主題及毛玻璃效果,是隨同Vista"桌面窗口治理(DWM)"而來的新特性,也是微軟市場(chǎng)推廣的一個(gè)重心,在應(yīng)用程序中集成毛玻璃效果,當(dāng)打開Aero主題時(shí),程序看上去會(huì)顯得非常與眾不同--很酷,對(duì)吧。
Aero主題中的毛玻璃效果
當(dāng)以Aero為主題時(shí),Vista會(huì)根據(jù)計(jì)算機(jī)顯卡進(jìn)行判定是否開啟毛玻璃效果,此時(shí)桌面由DWM進(jìn)行繪制,而DWM使用一個(gè)composition進(jìn)程來渲染桌面,其會(huì)在頂層窗口的非客戶區(qū)自動(dòng)使用Aero主題元素(有點(diǎn)類似于Windows XP)。又說回來,也不是總會(huì)添加這些毛玻璃效果的,假如計(jì)算機(jī)運(yùn)行于"電池模式",或用戶決定關(guān)閉透明效果,那么非客戶區(qū)就不會(huì)有毛玻璃效果了,如下圖所示。
假如在控制面板的可視效果中打開了透明玻璃效果,那非客戶區(qū)看上去就像下圖這樣:
請(qǐng)留意,記事本的邊框呈現(xiàn)綠色調(diào),這是墻紙透過來的顏色,并且也可以透過標(biāo)題欄看到桌面的一些圖標(biāo)。我們?cè)诰帉懘a的時(shí)候,要害只須留意composition是否打開,而不是設(shè)置了什么毛玻璃效果,因?yàn)镈WM會(huì)處理毛玻璃效果繪制的部分。
項(xiàng)目開始
***個(gè)示例程序是不帶視窗口、工具條、狀態(tài)條的SDI應(yīng)用程序,在運(yùn)行完WTL AppWizard之后,***件事就是設(shè)置stdafx.h中的#define,以便利用Vista的新特性。Vista的Windows版本為6,且Vista中IE的版本為7,設(shè)置完成后應(yīng)像下面這樣:
在GetThemeTextMetrics() API中的轉(zhuǎn)換,是對(duì)Platform SDK的uxtheme.h中錯(cuò)誤的修正,然而,Windows SDK卻沒有這個(gè)錯(cuò)誤,所以這個(gè)轉(zhuǎn)換導(dǎo)致了一個(gè)錯(cuò)誤,可刪除函數(shù)中的這個(gè)轉(zhuǎn)換,其他三個(gè)也同樣。 添加邊框的毛玻璃效果。