2010-12-03 78 views
3

可能重複:
C# WPF resolution independancy?WPF分辨率無關

是與什麼有關WPF分辨率獨立系統DPI顯示器的分辨率之間的差異。
更改兩者之間保持窗口的大小相同的WPF在早期不可能在User32中?
編輯: 我正在閱讀的書「C Sharp的臨WPF」說,如果我們在96 DPI中創建1英寸按鈕,然後將DPI更改爲120,由於像素密度更大,按鈕將變爲小(在winforms)。但我試過,我可以看到,在這兩種情況下,按鈕尺寸保持不變!

這是爲什麼?

回答

0

實際上,所謂的WPF解決方案獨立性並不能使您在Win32中做任何您無法做到的事情。這只是之前的工作。所以這裏唯一真正的變化就是開發工作 - 基本功能沒有改變。 (WPF中的所有內容都是如此,如果你有幾年的開發時間,你可以通過直接針對DirectX API進行編程來完成WPF的所有工作......)

WPF自動考慮標稱DPI配置。在Win32中,如果您希望應用程序對名義DPI敏感,則必須編寫其他代碼才能實現此目的,並且如果要避免文本被某些DPI裁剪等問題,則必須處理各種可怕的佈局問題。 (雖然現在我們已經在.NET 4 GDI32風格的文本渲染,你可以選擇回在WPF應用程序所有這些問題...)

所以回答你的問題基本上是:沒有區別。 WPF使得DPI更易於考慮,但它不會在這裏啓用任何新的行爲。

從根本上說,WPF運行到完全相同的問題,經典的Win32應用程式,原因很簡單,它可以訪問完全相同的信息,經典的Win32應用程序。正如在此討論的其他答案中鏈接的頁面一樣,Windows通常不知道DPI究竟是什麼。大多數時候它會告訴你顯示器是96dpi。好吧,我的計算機上連接了3個屏幕,而且Windows都報告了96dpi,儘管它們中沒有一個真的是96dpi,而且它們在現實中甚至都不是相同的dpi。

底線是:Windows通常不知道屏幕的真實DPI是什麼。沒有任何WPF可以做到克服這一點。如果有一種方法可以讓WPF發現真正的DPI,Win32應用程序也能夠發現它。