窗口显示模式和游戏可调用的 UI 对话框

本主题介绍一些特殊注意事项,适用于处理电脑上窗口成功显示模式和显示可调用游戏的 UI (TCUI) 对话。

建议确保游戏在调用可能显示 TCUI 的任何 API 之前显示游戏窗口。 此外,游戏窗口应使用全屏窗口/无边框模式或窗口/非最大化模式,而不是全屏独占模式。

游戏应采用本机显示分辨率,而不是自定义应用/游戏分辨率。 显示 TCUI 对话框时,某些技术(如 DirectX 9)不会正确处理分辨率的变化。

此外,某些中间件引擎和包装以及 DirectX 9 会在前景焦点转到显示的 TCUI 对话框时自动最小化全屏游戏窗口。 该行为会给用户带来不便,为了规避此行为,在显示 TCUI 对话框时会明确拒绝窗口最小化。 有关详细信息,请参阅本主题中稍后给出的“阻止游戏窗口最小化”部分。

对于使用非 DirectX 图形技术的游戏产品,建议的最佳做法因具体情况而异,如下所示。

如果游戏产品使用 OpenGL 或 Vulkan,则需要可显示属于桌面的窗口边界的“窗口”模式,以便在游戏上层呈现 TCUI 对话。 这是因为,根据视频卡驱动程序实现,以任意类型的全屏模式运行的游戏都可能在不涉及桌面窗口管理器的情况下呈现。 这会导致无法在游戏窗口上层显示 TCUI 对话。

对于图形技术,请联系您的 Xbox 支持代表。

阻止游戏窗口最小化

某些中间件引擎和分层系统(例如 Unity 和 Simple DirectMedia Layer (SDL))会在前景焦点移动到 TCUI 对话时自动最小化游戏的全屏窗口。

为组织这种行为,游戏运行时会使用 CBTProc 拒绝最小化游戏窗口的任何请求。 游戏运行时仅在检测到可以在 DirectX 游戏窗口上呈现覆盖层且 TCUI 对话可见时才会应用这些模式。

此外,游戏运行时还会在显示 TCUI 对话之前检测和修改可更改风格的窗口消息,以阻止游戏窗口呈现边框或标题栏。 WS_OVERLAPPEDWINDOW 组中的任何风格都不会应用到风格更改,除非它们在此前存在于旧风格中。 此修改仅在 TCUI 对话生命周期内实现。

有关 TCUI 对话框的 DirectX 9 注意事项

虽然如本主题前面部分的“阻止游戏窗口最小化”所述会阻止 DirectX 9 游戏最小化,但在显示 TCUI 对话框时,它们仍然会失去前景焦点。 游戏应准备好妥善处理这种焦点丢失,处理方式与响应在全屏运行时最小化游戏窗口的用户的方式完全相同。

有关 TCUI 对话框的 Unity 注意事项

对于任何应该会显示 TCUI 对话框的游戏,建议将“Application.runInBackground”设置为 true。