mirror of
https://github.com/microsoft/PowerToys.git
synced 2025-12-16 11:48:06 +01:00
[Peek]Fix title bar glitch after maximizing window (#31172)
This commit is contained in:
committed by
GitHub
parent
cf23574c6b
commit
4426df671e
@@ -2,7 +2,6 @@
|
||||
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using ManagedCommon;
|
||||
using Microsoft.UI.Xaml;
|
||||
@@ -25,12 +24,31 @@ namespace Peek.UI.Extensions
|
||||
internal static void CenterOnMonitor(this Window window, HWND hwndDesktop, double? width = null, double? height = null)
|
||||
{
|
||||
var hwndToCenter = new HWND(window.GetWindowHandle());
|
||||
|
||||
// If the window is maximized, restore to normal state before change its size
|
||||
var placement = default(WINDOWPLACEMENT);
|
||||
if (PInvoke.GetWindowPlacement(hwndToCenter, ref placement))
|
||||
{
|
||||
if (placement.showCmd == SHOW_WINDOW_CMD.SW_MAXIMIZE)
|
||||
{
|
||||
placement.showCmd = SHOW_WINDOW_CMD.SW_SHOWNORMAL;
|
||||
if (!PInvoke.SetWindowPlacement(hwndToCenter, in placement))
|
||||
{
|
||||
Logger.LogError($"SetWindowPlacement failed with error {Marshal.GetLastWin32Error()}");
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.LogError($"GetWindowPlacement failed with error {Marshal.GetLastWin32Error()}");
|
||||
}
|
||||
|
||||
var monitor = PInvoke.MonitorFromWindow(hwndDesktop, MONITOR_FROM_FLAGS.MONITOR_DEFAULTTONEAREST);
|
||||
MONITORINFO info = default(MONITORINFO);
|
||||
info.cbSize = 40;
|
||||
PInvoke.GetMonitorInfo(monitor, ref info);
|
||||
var dpi = PInvoke.GetDpiForWindow(new HWND(hwndDesktop));
|
||||
PInvoke.GetWindowRect(new HWND(hwndToCenter), out RECT windowRect);
|
||||
PInvoke.GetWindowRect(hwndToCenter, out RECT windowRect);
|
||||
var scalingFactor = dpi / 96d;
|
||||
var w = width.HasValue ? (int)(width * scalingFactor) : windowRect.right - windowRect.left;
|
||||
var h = height.HasValue ? (int)(height * scalingFactor) : windowRect.bottom - windowRect.top;
|
||||
@@ -38,7 +56,8 @@ namespace Peek.UI.Extensions
|
||||
var cy = (info.rcMonitor.bottom + info.rcMonitor.top) / 2;
|
||||
var left = cx - (w / 2);
|
||||
var top = cy - (h / 2);
|
||||
SetWindowPosOrThrow(new HWND(hwndToCenter), default(HWND), left, top, w, h, SET_WINDOW_POS_FLAGS.SWP_SHOWWINDOW);
|
||||
|
||||
SetWindowPosOrThrow(hwndToCenter, default(HWND), left, top, w, h, SET_WINDOW_POS_FLAGS.SWP_NOACTIVATE);
|
||||
}
|
||||
|
||||
private static void SetWindowPosOrThrow(HWND hWnd, HWND hWndInsertAfter, int x, int y, int cx, int cy, SET_WINDOW_POS_FLAGS uFlags)
|
||||
|
||||
@@ -18,3 +18,5 @@ MONITORINFO
|
||||
GetWindowRect
|
||||
SET_WINDOW_POS_FLAGS
|
||||
SetWindowPos
|
||||
GetWindowPlacement
|
||||
SetWindowPlacement
|
||||
Reference in New Issue
Block a user