2009-02-21 139 views
2

我有一個WIN32 SW,其UI是在96 DPI中設計的,所以當用戶將Windows DPI從96更改爲120或更大時,UI將會出錯。我想知道是否有API來強制我的SW以96DPI顯示UI。關於DPI問題

回答

1

沒有API強制您的應用以96DPI顯示。 DPI是一種設備設置,無法根據應用程序進行控制。

如果您可以更改程序,您可以縮放您的UI,以便在高DPI上正常查看。您需要致電GetDeviceCaps;更具體地說,您需要使用爲LOGPIXELSXLOGPIXELSY返回的數字計算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也是一個選項,但請注意存在競爭條件的危險。