Browse Source

Fix Win32 MonitorFromRect (#18285)

release/11.2.5
Julien Lebosquain 12 months ago
parent
commit
b5cfcf2a0a
  1. 2
      src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs
  2. 13
      src/Windows/Avalonia.Win32/ScreenImpl.cs

2
src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs

@ -1628,7 +1628,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);

13
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);
}

Loading…
Cancel
Save