桌面窗口管理器是什么呢?
它是Vista中的一個(gè)新組件:Desktop Window Manager(DWM)。它建立在WPF核心圖形層組件基礎(chǔ)之上。還記得我在第一個(gè)Post中所提到的Composition引擎嗎?DWM的桌面合成就是建立在這個(gè)Composition引擎基礎(chǔ)之上的新特征。它的出現(xiàn)幾乎改變了Vista中應(yīng)用程序的屏幕象素顯示方式。
通過DWM的桌面合成,應(yīng)用程序的顯示不再是直接畫到屏幕上,而是一個(gè)顯示內(nèi)存中的一個(gè)離屏Surface。然后由DWM將這些Surface合成顯示到屏幕之上。
從用戶體驗(yàn)的角度看,啟用DWM后,提供的視覺效果有毛玻璃框架、3D窗口變換動(dòng)畫、窗口翻轉(zhuǎn)和高分辨率支持。其中最明顯的特征有:任務(wù)欄窗口的實(shí)時(shí)縮略圖;Alt-Tab和Win-Tab組合鍵所看到的效果。


桌面合成(Composition)
在Vista之前,Windows要求應(yīng)用程序畫自己的可見區(qū)域,它們可以直接畫在顯卡的視頻緩沖里面。而在Vista,系統(tǒng)要求應(yīng)用程序把整個(gè)表面畫到離屏Surface當(dāng)中。然后由DWM控制所有的離屏表面,并把它們合成到一起顯示到真正的屏幕上。
現(xiàn)在計(jì)算機(jī)的圖形芯片飛速發(fā)展,具有了很強(qiáng)的處理能力,現(xiàn)在它們主要用于游戲等方面。DWM的主要目標(biāo)就是利用圖形芯片的處理能力也給非游戲用戶帶來盡可能好的體驗(yàn)。因此DWM是基于DirectX,特別是Direct3D。更準(zhǔn)備是說,DWM是直接建立在一個(gè)稱為Milcore的層次之上。Milcore又建立在DirectX之上。最終是用Direct3D紋理來表示窗口內(nèi)容和窗口框架。DWM/Milcore調(diào)用適當(dāng)?shù)腄irect3D函數(shù)把所有的Direct3D紋理合成為最終的桌面。Vista桌面就可以理解為一個(gè)全屏幕的Direct3D應(yīng)用程序。
從窗口系統(tǒng)的顯示角度上看,這可以給我們帶來很大的方便,幫助實(shí)現(xiàn)更高質(zhì)量的視覺效果,比如:
1、訪問窗口:現(xiàn)在所有的窗口都顯示到離屏表面,這些離屏表面就可以用于其他的地方了。例如前面提到的Alt-Tab組合鍵所看到的縮略圖,用戶還可以據(jù)此實(shí)現(xiàn)一些其他需求。
2、窗口操作中不再涉及到背景應(yīng)用程序:在Vista之前,如果隱藏的窗口變得重新可見,這部分區(qū)域只有在應(yīng)用程序醒來后并響應(yīng)了WM_PAINT才能被重畫,這就引起了很多難看的效果。在Vista中,背景窗口不會(huì)收到WM_PAINT,也不會(huì)被要求提交,因?yàn)樗麄兊膬?nèi)容已經(jīng)在離屏表面當(dāng)中了,可以被直接拿來進(jìn)行重新合成。
3、更眩的用戶體驗(yàn),這個(gè)不用多說了,大家可以有自己的體驗(yàn)感受。
4、高分辨率支持:大部分應(yīng)用程序不知道它所運(yùn)行的顯示器的分辨率。隨著高分辨率顯示器的普及,這會(huì)使應(yīng)用程序在物理空間看起來越來越小,效果很差。由于DWM訪問了窗口的離屏表面,其特殊的位置可以調(diào)整應(yīng)用程序的顯示分辨率,使它在高分辨率顯示器上有更好的效果。