关于DPI问题

发布于 2024-07-13 19:22:01 字数 118 浏览 4 评论 0 原文

我有一个 WIN32 软件,其 UI 设计为 96 DPI,因此当用户将 Windows DPI 从 96 更改为 120 或更大时,UI 将会出错。 我想知道是否有 API 可以强制我的软件以 96DPI 显示 UI。

I have a WIN32 SW which the UI was designed in 96 DPI, so when user changes the windows DPI from 96 to 120 or bigger, the UI will be wrong. I want to know if there is API to force my SW to display the UI with 96DPI.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

烟酉 2024-07-20 19:22:01

从 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

愛上了 2024-07-20 19:22:01

您还可以为您的应用程序添加 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.

吝吻 2024-07-20 19:22:01

没有 API 可以强制您的应用程序以 96DPI 显示。 DPI 是一种设备设置,无法按应用程序进行控制。

如果您可以更改程序,则可以缩放 UI 以在高 DPI 上正常显示。 您需要调用 GetDeviceCaps< /a>; 更具体地说,您需要使用 LOGPIXELSXLOGPIXELSY 返回的数字来计算 X 和 Y 比例。 像这样的东西:

HDC hdc;
double m_dDPIScaleX = GetDeviceCaps(hdc, LOGPIXELSX) / 96.0;
double m_dDPIScaleY = GetDeviceCaps(hdc, LOGPIXELSY) / 96.0;

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 for LOGPIXELSX and LOGPIXELSY. Something like this:

HDC hdc;
double m_dDPIScaleX = GetDeviceCaps(hdc, LOGPIXELSX) / 96.0;
double m_dDPIScaleY = GetDeviceCaps(hdc, LOGPIXELSY) / 96.0;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文