> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 窗口显示模式与 title-callable UI 对话框

> 配置 PC 游戏的窗口显示模式,使 title-callable UI(TCUI)对话框能正确渲染,并让 Gaming Runtime 在失去焦点时防止最小化。

本主题介绍在 PC 上处理窗口显示模式以及顺利显示 title-callable UI(TCUI)对话框时需要注意的特殊事项。

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

游戏应以显示器的原生分辨率运行,而不是自定义的应用/游戏分辨率。某些技术(例如 DirectX 9)在显示 TCUI 对话框时无法优雅处理分辨率变化。

除此之外,一些中间件引擎和包装层,以及 DirectX 9,当前台焦点被 TCUI 对话框夺走时会自动最小化全屏游戏窗口。为规避这种对用户不利的行为,在显示 TCUI 对话框时窗口最小化会被显式拒绝。详情参见本主题稍后的“防止游戏窗口最小化”一节。

对于使用非 DirectX 图形技术的游戏,我们的推荐实践如下。

如果游戏使用 OpenGL 或 Vulkan,则需要一个显示由桌面拥有的窗口边框的“窗口化”模式,才能让 TCUI 对话框在游戏之上渲染。这是因为根据显卡驱动的实现,任何形式的全屏运行都可能不经过 Desktop Window Manager,从而阻止 TCUI 对话框在游戏窗口之上显示。

对于其他图形技术,请联系你的 XBOX 支持代表。

## 防止游戏窗口最小化

一些中间件引擎与分层系统(例如 Unity 与 Simple DirectMedia Layer(SDL))会在前台焦点被 TCUI 对话框夺走时自动最小化游戏的全屏窗口。

为防止此行为,Gaming Runtime 使用 [CBTProc](https://learn.microsoft.com/previous-versions/windows/desktop/legacy/ms644977\(v=vs.85\)) 拒绝任何最小化游戏窗口的请求。Gaming Runtime 仅在检测到覆盖层可以渲染在全屏 DirectX 游戏窗口之上且 TCUI 对话框可见时才应用此模式。

此外,Gaming Runtime 会在显示 TCUI 对话框之前拦截并修改窗口样式变更消息,防止游戏窗口渲染边框或标题栏。除非之前的样式已经包含,否则 [WS\_OVERLAPPEDWINDOW](https://learn.microsoft.com/windows/win32/winmsg/window-styles) 组中的任何样式在样式变更时都不会被应用。此修改只在 TCUI 对话框存在期间生效。

## DirectX 9 与 TCUI 对话框的相关注意事项

尽管如“防止游戏窗口最小化”所述,DirectX 9 游戏被阻止最小化,但在显示 TCUI 对话框时它们仍会失去前台焦点。游戏应像响应用户在全屏运行时最小化游戏窗口那样,优雅地处理这种焦点丢失。

## Unity 与 TCUI 对话框的相关注意事项

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


## Related topics

- [XGameUiShowMessageDialogUiCallback](/zh-CN/reference/system/xgameui/functions/xgameuishowmessagedialoguicallback.md)
- [XGameUiShowMessageDialogAsync](/zh-CN/reference/system/xgameui/functions/xgameuishowmessagedialogasync.md)
- [FMA XR-131:游戏 DVR 和截图的显示模式](/zh-CN/publishing/certification/fma/xr-131.md)
- [XR-131 Game DVR 与截屏的显示模式支持](/zh-CN/publishing/certification/xr/xr-131.md)
- [XGameUiShowErrorDialogAsync](/zh-CN/reference/system/xgameui/functions/xgameuishowerrordialogasync.md)
