瀏覽代碼

Fix Win32 MonitorFromRect (#18285)

Julien Lebosquain 8 月之前
父節點
當前提交
3ee7102843
共有 2 個文件被更改,包括 8 次插入7 次删除
  1. 1 1
      src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs
  2. 7 6
      src/Windows/Avalonia.Win32/ScreenImpl.cs

+ 1 - 1
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);

+ 7 - 6
src/Windows/Avalonia.Win32/ScreenImpl.cs

@@ -70,13 +70,14 @@ internal unsafe class ScreenImpl : ScreensBase<nint, WinScreen>
 
     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);
     }