USER, GDI and DPI


這部份指的是有關視窗畫面的處理,在 Windows 7 使用新的顯示卡驅動程式架構 Windows Display Driver Model (WDDM),所有視窗都是透過 桌面視窗管理員 Desktop Windows Manager (dwm.exe) 這個處理程序來管理,當視窗要繪製時,會透過Composition Engine 在顯示卡的背景頁面記憶體中繪製,等到繪製完畢後,再切換讓使用者看到這個頁面,因此當你在快速拖曳視窗時,就不會和 Windows XP 一樣有一堆殘影留在畫面上了。

除此之外,為了進一步提升效能、以及支援 Aero 的透明效果,Composition Engine 是直接架構在 DirectX 與 Direct3D 之上,也就是直接由顯示卡上的處理器來進行畫面繪製,這和 Windows XP 的 GDI 繪圖有著天壤之別,傳統 GDI 是花費主 CPU 的運算能力,透過直接在顯示卡記憶體上填值來達到變更畫面像素的效果,一方面效率差,一方面也要大量耗用 CPU 運算資源。

Windows 7 也支援高解析度 (dpi) 的顯示設備,由於在高解析度的顯示設備上,視窗的圖示相對會變得太小,Windows 7 會自動調整圖示的大小,以便於使用者可以更舒適的觀看這些圖示。

新的視窗繪製機制與高解析度支援會為舊的應用程式帶來一些問題:

  • 工具提示、快顯功能表、…等等區域周圍會有黑框
  • 畫面閃動現象
  • 應用程式看不到玻璃效果
  • 文字有可能會被部份切掉或看起來太大
  • 圖形繪製出來的大小或位置不對

解決方案:在應用程式的捷徑內容畫面的「相容性」頁籤上進行設定

應用程式如果不想被 Windows 7 自動調整,可以呼叫 SetProcessDPIAware() 來處理,或者在應用程式的 manifest 設定檔中設定 dpiAware 元素的值:

參考資料:https://msdn.microsoft.com/en-us/library/ms633543(v=vs.85).aspx

 

返回上一頁 >