我正在开发一个在 Windows 10 和 8.1 上运行的应用程序,并且遇到了在具有不同 DPI 的显示器之间移动时缩放非客户区(菜单栏、标题栏)的问题。客户区已处理,但非客户区超出比例。 DPI 感知设置为 PerMonitorAware(v1,因为 v2 在 Windows 8.1 上不可用)。
函数 EnableNonClientDpiScaling 完全满足我的需要(这是对所有类似问题的公认答案)- 唉,它只是 Windows 10 中 API 的一部分。
有没有办法在没有前面提到的功能的情况下手动处理此问题 - 以保持对 Windows 8.1 的支持?或者支持 Windows 8.1 是否意味着在具有不同 DPI 的屏幕之间移动时无法调整非客户区的大小?
最佳答案
DPI 支持是一个不断变化的目标,您只需决定支持的最低平台是什么,并接受多显示器缩放在这些旧平台上并不完美。
在可用的版本上调用 EnableNonClientDpiScaling
(GetProcAddress
或您使用的任何语言的等效项)。
新的感知 list 元素在 Windows 10 中的工作方式意味着您可以在支持它的地方使用 Per-Monitor v2(1703 及更高版本),在旧版本上可以使用 PMv1、系统或 Unaware。 PMv2 使您可以自动缩放基于 DialogBox
的对话框。
关于winapi - 在支持 Windows 8.1 的应用程序上缩放非客户区以支持每个监视器的高 DPI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54110319/