为帮助 Windows 10 应用程序和 shell 元素在像素密度不同的显示器上显示为一致的大小,Windows 提供了内置缩放设置。 为使游戏在调整这些缩放设置后正确呈现和处理鼠标输入,需要设置默认 DPI 感知。 如果未能执行此操作,则游戏可能显示错误,使具有高 DPI 显示器的用户无法使用。
启用高 DPI 感知
确保游戏支持高 DPI 显示
- 检查游戏可执行文件的程序集清单 XML。 这可以是 titleName.exe(一个清单文件加 titleName.exe),也可以是游戏可执行文件中的嵌入式清单。 可通过命令行使用 sigcheck(如下所示)从游戏可执行文件中提取嵌入式清单。
sigcheck -m titleName.exe
- 如果清单 XML 中仅显示以下
<dpiAware>
标记,则不支持高 DPI 显示。<windowsSettings> <dpiAware> true </dpiAware> </windowsSettings>
- 嵌入式清单优先于松散清单。 如果存在,请转到步骤 4。 如果没有嵌入式清单,请使用以下内容创建 titleName.exe.manifest 文件。
<?xml version="1.0" encoding="UTF-8" standlone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <application xmlns="urn:schemas-microsoft-com:asm.v3"> <windowsSettings> <dpiAwareness xmlns="https://schemas.microsoft.com/SMT/2016/WindowsSettings"> PerMonitorV2 </dpiAwareness> </windowsSettings> </application> </assembly>
- 如果存在嵌入式清单,请使用 Windows SDK 中的以下 Mt.exe 工具通过命令行定位到它。
mt -inputresource:<titleExeFilename> -out:<manifestOutputFilename>
- 编辑嵌入式清单,添加新的
<dpiAwareness>
标记(如下所示)。<windowsSettings> <dpiAwareness xmlns="https://schemas.microsoft.com/SMT/2016/WindowsSettings"> PerMonitorV2 </dpiAwareness> </windowsSettings>
- 使用 Windows SDK 中的以下 Mt.exe 工具通过命令行更新嵌入式清单。
mt -updateresource:<titleExeFilename> -manifest <manifestFilename>
你的游戏现在支持高 DPI 显示。
验证高 DPI 感知
确认游戏支持高 DPI 显示
- 使用支持高 DPI 显示的电脑(例如 Surface Studio 2),导航到“设置”>“显示”,并将缩放比例设置为“150%”。
- 启动你的游戏。
- 检查光标所在的屏幕,确认游戏显示符合预期。 例如,全屏游戏应占据整个屏幕。
- 在屏幕上移动光标,确保其可以到达游戏窗口的整个界面区域。
- 将鼠标悬停在交互式 UI 元素(如按钮)上,确认其外观和交互符合预期。 例如,当光标悬停在按钮正上方而不是其旁边时,其外观将会改变。
备注
- 禁用注册表虚拟化也许可以解决高 DPI 感知问题,但不建议这样做。
-
Visual Studio 的“配置属性”中有“DPI 感知”选项,但选择该选项将使用旧的
<dpiAware>
标记,而该标记不适用于通过 MSIXVC 打包的游戏。