桌面窗口管理器是什么呢?
它是Vista中的一個新組件:Desktop Window Manager(DWM)。它建立在WPF核心圖形層組件基礎之上。還記得我在第一個Post中所提到的Composition引擎嗎?DWM的桌面合成就是建立在這個Composition引擎基礎之上的新特征。它的出現(xiàn)幾乎改變了Vista中應用程序的屏幕象素顯示方式。
通過DWM的桌面合成,應用程序的顯示不再是直接畫到屏幕上,而是一個顯示內存中的一個離屏Surface。然后由DWM將這些Surface合成顯示到屏幕之上。
從用戶體驗的角度看,啟用DWM后,提供的視覺效果有毛玻璃框架、3D窗口變換動畫、窗口翻轉和高分辨率支持。其中最明顯的特征有:任務欄窗口的實時縮略圖;Alt-Tab和Win-Tab組合鍵所看到的效果。
![](/d/20211018/ca632de0b1c07e1ee616c20c0f7a41ef.gif)
![](/d/20211018/00cbf8e34e17e11adb249bf0774bd500.gif)
桌面合成(Composition)
在Vista之前,Windows要求應用程序畫自己的可見區(qū)域,它們可以直接畫在顯卡的視頻緩沖里面。而在Vista,系統(tǒng)要求應用程序把整個表面畫到離屏Surface當中。然后由DWM控制所有的離屏表面,并把它們合成到一起顯示到真正的屏幕上。
現(xiàn)在計算機的圖形芯片飛速發(fā)展,具有了很強的處理能力,現(xiàn)在它們主要用于游戲等方面。DWM的主要目標就是利用圖形芯片的處理能力也給非游戲用戶帶來盡可能好的體驗。因此DWM是基于DirectX,特別是Direct3D。更準備是說,DWM是直接建立在一個稱為Milcore的層次之上。Milcore又建立在DirectX之上。最終是用Direct3D紋理來表示窗口內容和窗口框架。DWM/Milcore調用適當?shù)腄irect3D函數(shù)把所有的Direct3D紋理合成為最終的桌面。Vista桌面就可以理解為一個全屏幕的Direct3D應用程序。
從窗口系統(tǒng)的顯示角度上看,這可以給我們帶來很大的方便,幫助實現(xiàn)更高質量的視覺效果,比如:
1、訪問窗口:現(xiàn)在所有的窗口都顯示到離屏表面,這些離屏表面就可以用于其他的地方了。例如前面提到的Alt-Tab組合鍵所看到的縮略圖,用戶還可以據(jù)此實現(xiàn)一些其他需求。
2、窗口操作中不再涉及到背景應用程序:在Vista之前,如果隱藏的窗口變得重新可見,這部分區(qū)域只有在應用程序醒來后并響應了WM_PAINT才能被重畫,這就引起了很多難看的效果。在Vista中,背景窗口不會收到WM_PAINT,也不會被要求提交,因為他們的內容已經(jīng)在離屏表面當中了,可以被直接拿來進行重新合成。
3、更眩的用戶體驗,這個不用多說了,大家可以有自己的體驗感受。
4、高分辨率支持:大部分應用程序不知道它所運行的顯示器的分辨率。隨著高分辨率顯示器的普及,這會使應用程序在物理空間看起來越來越小,效果很差。由于DWM訪問了窗口的離屏表面,其特殊的位置可以調整應用程序的顯示分辨率,使它在高分辨率顯示器上有更好的效果。