关于DPI问题
我有一个 WIN32 软件,其 UI 设计为 96 DPI,因此当用户将 Windows DPI 从 96 更改为 120 或更大时,UI 将会出错。 我想知道是否有 API 可以强制我的软件以 96DPI 显示 UI。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我有一个 WIN32 软件,其 UI 设计为 96 DPI,因此当用户将 Windows DPI 从 96 更改为 120 或更大时,UI 将会出错。 我想知道是否有 API 可以强制我的软件以 96DPI 显示 UI。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
从 Windows Vista 开始,DPI 的缩放应该会自动发生。 我没有任何直接经验来了解它的工作原理,但这里是解释如何关闭它的页面:
http://msdn.microsoft.com/en-us/library/ms701681(VS.85).aspx
Starting with Windows Vista, scaling for DPI is supposed to happen automatically. I don't have any direct experience to know how well it works, but here's the page that explains how to turn it off:
http://msdn.microsoft.com/en-us/library/ms701681(VS.85).aspx
您还可以为您的应用程序添加 appcompat 密钥。 在注册表中的位置是:
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
这是每用户设置,
HKEY_LOCAL_MACHINE
中有相同的键code>,但当然这是一个系统设置,需要提升权限才能写入。 添加如下键:"C:\path\to\app.exe"="HIGHDPIAWARE"
将为您的程序启用该兼容性标志,这将关闭 DPI 缩放。 这是针对 Vista+ 的。
SetProcessDPIAware 也是一个选项,但请注意存在以下危险:根据文档,竞争条件。
You can also add an appcompat key for your application. The place for this in the registry is:
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
That is the per-user settings, there is the same key in
HKEY_LOCAL_MACHINE
, but of course that is a system setting and will require elevated privileges to write to. Adding a key like so:"C:\path\to\app.exe"="HIGHDPIAWARE"
Will enable that compatibility flag for your program, which will turn off DPI scaling. This is for Vista+.
SetProcessDPIAware is also an option, but be aware there is a danger of a race condition, according to the documentation.
没有 API 可以强制您的应用程序以 96DPI 显示。 DPI 是一种设备设置,无法按应用程序进行控制。
如果您可以更改程序,则可以缩放 UI 以在高 DPI 上正常显示。 您需要调用
GetDeviceCaps
< /a>; 更具体地说,您需要使用LOGPIXELSX
和LOGPIXELSY
返回的数字来计算 X 和 Y 比例。 像这样的东西:There is no API to force your app to show at 96DPI. The DPI is a device setting and cannot be controlled per application.
If you can change your program, you can scale your UI to look properly on high DPI though. You need to call
GetDeviceCaps
; more specificaly, you need to calculate the X and Y scale using the number returned forLOGPIXELSX
andLOGPIXELSY
. Something like this: