SwapChainPanel DPI 意识

问题描述 投票:0回答:1

我的应用程序有一个要绘制的交换链,可以直接绘制到

HWND
,或者在 WinUI3 版本中绘制到
SwapChainPanel

当应用程序清单中缺少 DPI 感知设置时,一切都很好:

<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>

我的 DPI 始终为 96,Windows 会适当缩放。

当我的应用程序具有 DPI 感知功能,并将其放在缩放比例为 150%、DPI 为 144 的 4K 屏幕上时,我的应用程序的普通 Win32 版本可以正确运行。我得到 4K 的

GetClientRect
,我的 Direct2D
SwapChain
尺寸也是 3840x2160。

当我使用

SwapChainPanel
运行 WinUI 版本时,会看到奇怪的事情。我仍然得到 3840x2160 的 Direct2D
SwapChain
,但
SwapChainPanel
调整大小超出屏幕,因此看不到内容的最右侧和最底部。 Direct2D 代码看到 3840x2160 的正常矩形,但未显示绘制到该矩形的底部区域。

如果我将 DPI Awarename 设置为

"PerMonitor"
而不是
"PerMonitorV2"
,则它可以正常工作。

我错过了什么吗?

winapi winui-3
1个回答
0
投票

您可以参考该主题:https://github.com/microsoft/microsoft-ui-xaml/issues/8219

根据文档:SwapChainPanel 类

为了保持清晰的矢量渲染,您应该监听 CompositionScaleChanged 事件并查询 CompositionScaleX 和 CompositionScaleY 属性值用于说明当前 UI 比例, 并可能从 DirectX 再次渲染。否则 XAML 布局可能会 进行缩放,您的视觉效果可能会降低。

这是目前的设计。

© www.soinside.com 2019 - 2024. All rights reserved.