From 7f6aa26986f138e2613b171dfbcd47b2cc4be12a Mon Sep 17 00:00:00 2001 From: ww-rm Date: Mon, 21 Apr 2025 00:54:04 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SpineViewer/Controls/SpinePreviewPanel.cs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/SpineViewer/Controls/SpinePreviewPanel.cs b/SpineViewer/Controls/SpinePreviewPanel.cs index 14bb048..044c551 100644 --- a/SpineViewer/Controls/SpinePreviewPanel.cs +++ b/SpineViewer/Controls/SpinePreviewPanel.cs @@ -735,12 +735,16 @@ namespace SpineViewer.Controls { var screenBounds = Screen.FromControl(this).Bounds; Resolution = screenBounds.Size; - spinePreviewFullScreenForm.Controls.Add(panel_RenderContainer); + PropertyGrid?.Refresh(); + + // PerfMonitorV2 模式下, 位置和大小需要分开设置 + // 因为目标位置的 DPI 可能发生变化, 因此在 WM_POSITIONCHANGED 之后会收到 WM_DPICHANGED + // 进而导致一次额外的 WM_SIZE 消息, 其大小是 DPI 修改前的大小, 这个消息在此次设置之后发生 + // 因此如果同时设置位置和大小则大小可能设置失败 spinePreviewFullScreenForm.Location = screenBounds.Location; spinePreviewFullScreenForm.Size = screenBounds.Size; - //spinePreviewFullScreenForm.Bounds = screenBounds; // XXX: DPI 在 V2 模式下貌似有奇怪的缓存 BUG 导致通过 Bounds 设置位置时 Size 无法在第一次正确响应 + spinePreviewFullScreenForm.Controls.Add(panel_RenderContainer); spinePreviewFullScreenForm.Show(); - PropertyGrid?.Refresh(); } private void spinePreviewFullScreenForm_KeyDown(object sender, KeyEventArgs e)