winapi - 在支持 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 的屏幕之间移动时无法调整非客户区的大小?
解决方案
DPI 支持是一个不断变化的目标,您只需确定您的最低支持平台是什么,并接受多显示器缩放在这些旧平台上并不完美。
调用EnableNonClientDpiScaling
可用的版本(GetProcAddress
或您使用的任何语言的等效版本)。
新的感知清单元素在 Windows 10 中的工作方式意味着您可以是受支持的 Per-Monitor v2(1703 及更高版本),以及旧版本上的 PMv1、System 或 Unaware。PMv2 为您提供DialogBox
基于对话框的自动缩放。
推荐阅读
- debugging - 安卓 | WiFi adb在android studio中不断断开连接
- swift - 如何修复错误“未设置开始日期”?
- regex - 查找文件的常规表达式
- reactjs - ReactJs - 根据环境提供 index.html 文件
- python - 我不明白为什么会发生校验和错误
- dom - 什么是 DOM 元素节点的“is”值?
- r - R data.table:如何使用作为向量提供的列名通过引用更新行?
- c# - 我的 do while 循环无法中断。我不知道怎么了?当键入 && 时它会中断,但如果我键入 || 则不会
- c# - 单词数组中单词的结束位置不正确
- python - 如何创建一个显示每个 bin 概率的 seaborn 图?