問題
在windows 8.1(和更新版本)上,DPI設置是每個顯示器。我可以在系統設置中清楚地看到我的主顯示器(筆記本電腦)設置爲125%dpi,而我的備用顯示器設置爲100%dpi。我的應用程序完全是用C#編寫的,而我嘗試過的每個API調用都會導致輔助監視器的DPI不正確。請記住,那我打電話,我處理的初始化這種方法,並已在我的清單中指定的DPI意識到:檢索輔助監視器DPI的正確方法是什麼?
(shcore.dll)
SetProcessDpiAwareness(PROCESS_DPI_AWARENESS::PROCESS_PER_MONITOR_DPI_AWARE);
嘗試
(shcore.dll)
GetDpiForMonitor(hMonitor, MONITOR_DPI_TYPE::MDT_EFFECTIVE_DPI, &dpiX, &dpiY)
(導致120無論HMONITOR手柄)
(user32.dll)
IntPtr dC = CreateDC(...);
double logX = (double)GetDeviceCaps(dC, LOGPIXELSX);
double logY = (double)GetDeviceCaps(dC, LOGPIXELSY);
(結果120而不考慮的CreateDC設備名稱的)
顯示器佈局
,嚴重混淆了我,是第一顯示器是矩形{0,0,1920,1080}
但第二個顯示器是{2400,0,2400,1350}
,基本上使得{4800x1350}
一個實際的桌面大小和{3840x1080}
虛擬桌面大小的另一件事,但是顯示器之間缺少像素,我無法解釋並且我不明白。
Screen 1 Screen 2
Actual Pixels: 1920x1080 2400x1350
Virtual Pixels: 1536x864 1920x1080
Top-Left Coord: 0x0 2400x0
Actual DPI: 120 (125%) 96 (100%)
Returned DPI: 120 (125%) 120 (125%)
的另一種方式,我可以確認的是,顯示器不同的DPI,是拖整個顯示器之間的邊界的任何DPI感知應用程序的中心點會導致窗口來改變它的大小是整個顯示器一致( WPF默認是這樣做的)。