我有一個WIN32 SW,其UI是在96 DPI中設計的,所以當用戶將Windows DPI從96更改爲120或更大時,UI將會出錯。我想知道是否有API來強制我的SW以96DPI顯示UI。關於DPI問題
Q
關於DPI問題
2
A
回答
2
從Windows Vista開始,縮放DPI應該會自動發生。我沒有任何直接的經驗,知道它有多好作品,但這裏的解釋如何將其關閉的頁面:
http://msdn.microsoft.com/en-us/library/ms701681(VS.85).aspx
1
沒有API強制您的應用以96DPI顯示。 DPI是一種設備設置,無法根據應用程序進行控制。
如果您可以更改程序,您可以縮放您的UI,以便在高DPI上正常查看。您需要致電GetDeviceCaps
;更具體地說,您需要使用爲LOGPIXELSX
和LOGPIXELSY
返回的數字計算X和Y比例。類似這樣的:
HDC hdc;
double m_dDPIScaleX = GetDeviceCaps(hdc, LOGPIXELSX)/96.0;
double m_dDPIScaleY = GetDeviceCaps(hdc, LOGPIXELSY)/96.0;
2
您還可以添加程序兼容性鍵爲您的應用。在註冊表中這樣做的地方是:
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
這是每個用戶設置,存在HKEY_LOCAL_MACHINE
相同的密鑰,但當然這是系統設置,將需要提升權限寫入。添加一個關鍵,像這樣:
"C:\path\to\app.exe"="HIGHDPIAWARE"
將啓用兼容性標誌爲您的程序,這將關閉DPI縮放。這是Vista +。根據文件記錄,
SetProcessDPIAware也是一個選項,但請注意存在競爭條件的危險。
相關問題
- 1. 關於決議與DPI的問題?
- 2. Windows DPI相關問題
- 3. NSImage DPI問題
- 4. WPF DPI問題
- 5. WPF高DPI問題
- 6. 關於dpi和layout-swx
- 7. Visual Studio和DPI問題
- 8. 問題關於C++
- 9. 問題關於ASP.NET
- 10. 問題關於PHP
- 11. 問題關於CCMenuItemToggle
- 12. 關於sas形成問題的問題
- 13. 關於JqGrid的問題和問題
- 14. 關於C#中XPathNodeIterator問題的問題#
- 15. MPDF文檔和圖像DPI問題
- 16. Windows應用程序 - DPI問題
- 17. 關於Java類的問題
- 18. 關於Winforms的問題
- 19. 關於geocoder gem的問題
- 20. 關於初始化問題
- 21. 關於Java.lang.Error的問題
- 22. 關於webhooks的問題
- 23. 問題關於C#優化
- 24. 關於Mercurial的問題1.8.2
- 25. 關於UISegmentedControl的問題
- 26. 關於序言的問題
- 27. 關於boost :: swap的問題
- 28. 關於initWithNibName的問題
- 29. 關於MathHelper.ToRadians()的問題;
- 30. 關於線程的問題