我有一个WIN32 SW,其UI设计为96 DPI,因此当用户将Windows DPI从96更改为120或更大时,UI将是错误的。我想知道是否有API强制我的SW显示96DPI的UI。
答案 0 :(得分:2)
从Windows Vista开始,DPI的缩放应该会自动发生。我没有任何直接经验知道它的工作原理,但这里是解释如何关闭它的页面:
http://msdn.microsoft.com/en-us/library/ms701681(VS.85).aspx
答案 1 :(得分:2)
您还可以为应用程序添加appcompat密钥。在注册表中的位置是:
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
这是每用户设置,HKEY_LOCAL_MACHINE
中有相同的密钥,但当然这是一个系统设置,需要提升权限才能写入。像这样添加一个键:
"C:\path\to\app.exe"="HIGHDPIAWARE"
将为您的程序启用该兼容性标志,这将关闭DPI缩放。这适用于Vista +。
根据文件,SetProcessDPIAware也是一种选择,但请注意存在竞争条件的危险。
答案 2 :(得分: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;