首页 > 解决方案 > 在支持 Windows 8.1 的应用程序上缩放非客户区以支持每台显示器的高 DPI

问题描述

我正在开发一个在 Windows 10 和 8.1 上运行的应用程序,并且在具有不同 DPI 的显示器之间移动时遇到了缩放非客户区(菜单栏、标题栏)的问题。客户区得到处理,但非客户区不成比例。DPI Awareness 设置为 PerMonitorAware(v1,因为 v2 在 Windows 8.1 上不可用)。

EnableNonClientDpiScaling 函数完全符合我的需要(它是所有类似问题的公认答案) - 可惜它只是 Windows 10 上 API 的一部分。

有没有办法在没有前面提到的功能的情况下手动处理这个 - 为了保持对 Windows 8.1 的支持?或者支持 Windows 8.1 是否意味着在具有不同 DPI 的屏幕之间移动时无法调整非客户区的大小?

标签: winapiwindows-8.1dpihighdpi

解决方案


DPI 支持是一个不断变化的目标,您只需确定您的最低支持平台是什么,并接受多显示器缩放在这些旧平台上并不完美。

调用EnableNonClientDpiScaling可用的版本(GetProcAddress或您使用的任何语言的等效版本)。

新的感知清单元素在 Windows 10 中的工作方式意味着您可以是受支持的 Per-Monitor v2(1703 及更高版本),以及旧版本上的 PMv1、System 或 Unaware。PMv2 为您提供DialogBox基于对话框的自动缩放。


推荐阅读