From 3ee7102843e7add8a21d4361f0e3fc916485f9ca Mon Sep 17 00:00:00 2001 From: Julien Lebosquain Date: Sat, 22 Feb 2025 00:53:47 +0100 Subject: [PATCH] Fix Win32 MonitorFromRect (#18285) --- .../Avalonia.Win32/Interop/UnmanagedMethods.cs | 2 +- src/Windows/Avalonia.Win32/ScreenImpl.cs | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs b/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs index 2027ef0674..5ebc165dd5 100644 --- a/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs +++ b/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs @@ -1631,7 +1631,7 @@ namespace Avalonia.Win32.Interop public static extern IntPtr MonitorFromPoint(POINT pt, MONITOR dwFlags); [DllImport("user32.dll")] - public static extern IntPtr MonitorFromRect(RECT rect, MONITOR dwFlags); + public static extern IntPtr MonitorFromRect(RECT* rect, MONITOR dwFlags); [DllImport("user32.dll")] public static extern IntPtr MonitorFromWindow(IntPtr hwnd, MONITOR dwFlags); diff --git a/src/Windows/Avalonia.Win32/ScreenImpl.cs b/src/Windows/Avalonia.Win32/ScreenImpl.cs index cb9c420c00..0f73d39249 100644 --- a/src/Windows/Avalonia.Win32/ScreenImpl.cs +++ b/src/Windows/Avalonia.Win32/ScreenImpl.cs @@ -70,13 +70,14 @@ internal unsafe class ScreenImpl : ScreensBase protected override Screen? ScreenFromRectCore(PixelRect rect) { - var monitor = MonitorFromRect(new RECT + var r = new RECT { - left = rect.TopLeft.X, - top = rect.TopLeft.Y, - right = rect.TopRight.X, - bottom = rect.BottomRight.Y - }, UnmanagedMethods.MONITOR.MONITOR_DEFAULTTONULL); + left = rect.X, + top = rect.Y, + right = rect.Right, + bottom = rect.Bottom + }; + var monitor = MonitorFromRect(&r, MONITOR.MONITOR_DEFAULTTONULL); return ScreenFromHMonitor(monitor); }