我有一个WIN32软件,它的UI是设计在96DPI,所以当用户改变窗口DPI从96到120或更大,UI将是错误的。我想知道是否有API强制我的软件以96DPI显示UI。
发布于 2009-02-21 06:37:27
从Windows Vista开始,DPI的缩放应该是自动进行的。我没有任何直接的经验来了解它是如何工作的,但这里有一个页面解释了如何关闭它:
http://msdn.microsoft.com/en-us/library/ms701681(VS.85).aspx
发布于 2009-02-21 06:58:24
您还可以为您的应用程序添加appcompat密钥。注册表中的位置为:
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
这是每个用户的设置,在HKEY_LOCAL_MACHINE中也有相同的密钥,但这当然是一个系统设置,需要提升权限才能写入。像这样添加key:
"C:\path\to\app.exe"="HIGHDPIAWARE"
将为您的程序启用该兼容性标志,这将关闭DPI缩放。这是为Vista+准备的。
SetProcessDPIAware也是一种选择,但根据文档,请注意存在竞争条件的危险。
发布于 2009-02-21 04:42:49
没有API可以强制你的应用程序以96DPI显示。DPI是设备设置,不能针对每个应用程序进行控制。
如果你可以改变你的程序,你可以缩放你的用户界面,使其在高DPI上看起来更好。您需要调用GetDeviceCaps(http://msdn.microsoft.com/en-us/library/dd144877(VS.85%29.aspx);更具体地说,您需要使用LOGPIXELSX和LOGPIXELSY返回的数字来计算X和Y刻度。如下所示:
HDC hdc;
double m_dDPIScaleX = GetDeviceCaps(hdc, LOGPIXELSX) / 96.0;
double m_dDPIScaleY = GetDeviceCaps(hdc, LOGPIXELSY) / 96.0;https://stackoverflow.com/questions/572270
复制相似问题