From f907139a5c5195bf70da2b633cc30c8d3e1f9eb2 Mon Sep 17 00:00:00 2001 From: ahopper Date: Mon, 8 Oct 2018 12:54:23 +0100 Subject: [PATCH 1/4] make MONITORINFO a struct --- .../Avalonia.Win32/Interop/UnmanagedMethods.cs | 15 ++++++++++----- src/Windows/Avalonia.Win32/ScreenImpl.cs | 2 +- src/Windows/Avalonia.Win32/WindowImpl.cs | 2 +- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs b/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs index d6b95bc7b0..c7fce95fbc 100644 --- a/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs +++ b/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs @@ -1055,12 +1055,17 @@ namespace Avalonia.Win32.Interop } [StructLayout(LayoutKind.Sequential)] - internal class MONITORINFO + internal struct MONITORINFO { - public int cbSize = Marshal.SizeOf(); - public RECT rcMonitor = new RECT(); - public RECT rcWork = new RECT(); - public int dwFlags = 0; + public int cbSize; + public RECT rcMonitor; + public RECT rcWork; + public int dwFlags; + + public static MONITORINFO NewMONITORINFO() + { + return new MONITORINFO() { cbSize = Marshal.SizeOf() }; + } public enum MonitorOptions : uint { diff --git a/src/Windows/Avalonia.Win32/ScreenImpl.cs b/src/Windows/Avalonia.Win32/ScreenImpl.cs index e1df24151d..6d56a5e213 100644 --- a/src/Windows/Avalonia.Win32/ScreenImpl.cs +++ b/src/Windows/Avalonia.Win32/ScreenImpl.cs @@ -26,7 +26,7 @@ namespace Avalonia.Win32 EnumDisplayMonitors(IntPtr.Zero, IntPtr.Zero, (IntPtr monitor, IntPtr hdcMonitor, ref Rect lprcMonitor, IntPtr data) => { - MONITORINFO monitorInfo = new MONITORINFO(); + MONITORINFO monitorInfo = MONITORINFO.NewMONITORINFO(); if (GetMonitorInfo(monitor, monitorInfo)) { RECT bounds = monitorInfo.rcMonitor; diff --git a/src/Windows/Avalonia.Win32/WindowImpl.cs b/src/Windows/Avalonia.Win32/WindowImpl.cs index 65580ff9c8..bd37aa6109 100644 --- a/src/Windows/Avalonia.Win32/WindowImpl.cs +++ b/src/Windows/Avalonia.Win32/WindowImpl.cs @@ -837,7 +837,7 @@ namespace Avalonia.Win32 if (monitor != IntPtr.Zero) { - MONITORINFO monitorInfo = new MONITORINFO(); + MONITORINFO monitorInfo = MONITORINFO.NewMONITORINFO(); if (GetMonitorInfo(monitor, monitorInfo)) { From 5786d51853d50d57a473949144a3bad39b01eac7 Mon Sep 17 00:00:00 2001 From: ahopper Date: Mon, 8 Oct 2018 13:51:38 +0100 Subject: [PATCH 2/4] pass MONITORINFO as ref --- src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs | 2 +- src/Windows/Avalonia.Win32/ScreenImpl.cs | 2 +- src/Windows/Avalonia.Win32/WindowImpl.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs b/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs index c7fce95fbc..a2801bb170 100644 --- a/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs +++ b/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs @@ -987,7 +987,7 @@ namespace Avalonia.Win32.Interop [DllImport("user32", EntryPoint = "GetMonitorInfoW", ExactSpelling = true, CharSet = CharSet.Unicode)] [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool GetMonitorInfo([In] IntPtr hMonitor, [Out] MONITORINFO lpmi); + public static extern bool GetMonitorInfo([In] IntPtr hMonitor, ref MONITORINFO lpmi); [return: MarshalAs(UnmanagedType.Bool)] [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "PostMessageW")] diff --git a/src/Windows/Avalonia.Win32/ScreenImpl.cs b/src/Windows/Avalonia.Win32/ScreenImpl.cs index 6d56a5e213..81f6b0e65c 100644 --- a/src/Windows/Avalonia.Win32/ScreenImpl.cs +++ b/src/Windows/Avalonia.Win32/ScreenImpl.cs @@ -27,7 +27,7 @@ namespace Avalonia.Win32 (IntPtr monitor, IntPtr hdcMonitor, ref Rect lprcMonitor, IntPtr data) => { MONITORINFO monitorInfo = MONITORINFO.NewMONITORINFO(); - if (GetMonitorInfo(monitor, monitorInfo)) + if (GetMonitorInfo(monitor,ref monitorInfo)) { RECT bounds = monitorInfo.rcMonitor; RECT workingArea = monitorInfo.rcWork; diff --git a/src/Windows/Avalonia.Win32/WindowImpl.cs b/src/Windows/Avalonia.Win32/WindowImpl.cs index bd37aa6109..bbae965a22 100644 --- a/src/Windows/Avalonia.Win32/WindowImpl.cs +++ b/src/Windows/Avalonia.Win32/WindowImpl.cs @@ -839,7 +839,7 @@ namespace Avalonia.Win32 { MONITORINFO monitorInfo = MONITORINFO.NewMONITORINFO(); - if (GetMonitorInfo(monitor, monitorInfo)) + if (GetMonitorInfo(monitor,ref monitorInfo)) { RECT rcMonitorArea = monitorInfo.rcMonitor; From 314ada4e4a5d0d0a02599beec132257b78bdc602 Mon Sep 17 00:00:00 2001 From: ahopper Date: Tue, 9 Oct 2018 21:56:52 +0100 Subject: [PATCH 3/4] renamed NewMONITORINFO to CreateMONITORINFO --- src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs | 2 +- src/Windows/Avalonia.Win32/ScreenImpl.cs | 2 +- src/Windows/Avalonia.Win32/WindowImpl.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs b/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs index a2801bb170..c8059ee169 100644 --- a/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs +++ b/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs @@ -1062,7 +1062,7 @@ namespace Avalonia.Win32.Interop public RECT rcWork; public int dwFlags; - public static MONITORINFO NewMONITORINFO() + public static MONITORINFO CreateMONITORINFO() { return new MONITORINFO() { cbSize = Marshal.SizeOf() }; } diff --git a/src/Windows/Avalonia.Win32/ScreenImpl.cs b/src/Windows/Avalonia.Win32/ScreenImpl.cs index 81f6b0e65c..b02eb64215 100644 --- a/src/Windows/Avalonia.Win32/ScreenImpl.cs +++ b/src/Windows/Avalonia.Win32/ScreenImpl.cs @@ -26,7 +26,7 @@ namespace Avalonia.Win32 EnumDisplayMonitors(IntPtr.Zero, IntPtr.Zero, (IntPtr monitor, IntPtr hdcMonitor, ref Rect lprcMonitor, IntPtr data) => { - MONITORINFO monitorInfo = MONITORINFO.NewMONITORINFO(); + MONITORINFO monitorInfo = MONITORINFO.CreateMONITORINFO(); if (GetMonitorInfo(monitor,ref monitorInfo)) { RECT bounds = monitorInfo.rcMonitor; diff --git a/src/Windows/Avalonia.Win32/WindowImpl.cs b/src/Windows/Avalonia.Win32/WindowImpl.cs index bbae965a22..114a57eb6d 100644 --- a/src/Windows/Avalonia.Win32/WindowImpl.cs +++ b/src/Windows/Avalonia.Win32/WindowImpl.cs @@ -837,7 +837,7 @@ namespace Avalonia.Win32 if (monitor != IntPtr.Zero) { - MONITORINFO monitorInfo = MONITORINFO.NewMONITORINFO(); + MONITORINFO monitorInfo = MONITORINFO.CreateMONITORINFO(); if (GetMonitorInfo(monitor,ref monitorInfo)) { From 11d676ac0b816632f1163aafc92dae9d3aab01f8 Mon Sep 17 00:00:00 2001 From: ahopper Date: Tue, 9 Oct 2018 22:03:20 +0100 Subject: [PATCH 4/4] rename CreateMONITORINFO to Create --- src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs | 2 +- src/Windows/Avalonia.Win32/ScreenImpl.cs | 2 +- src/Windows/Avalonia.Win32/WindowImpl.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs b/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs index c8059ee169..5fe889f41d 100644 --- a/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs +++ b/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs @@ -1062,7 +1062,7 @@ namespace Avalonia.Win32.Interop public RECT rcWork; public int dwFlags; - public static MONITORINFO CreateMONITORINFO() + public static MONITORINFO Create() { return new MONITORINFO() { cbSize = Marshal.SizeOf() }; } diff --git a/src/Windows/Avalonia.Win32/ScreenImpl.cs b/src/Windows/Avalonia.Win32/ScreenImpl.cs index b02eb64215..5cfceb68b7 100644 --- a/src/Windows/Avalonia.Win32/ScreenImpl.cs +++ b/src/Windows/Avalonia.Win32/ScreenImpl.cs @@ -26,7 +26,7 @@ namespace Avalonia.Win32 EnumDisplayMonitors(IntPtr.Zero, IntPtr.Zero, (IntPtr monitor, IntPtr hdcMonitor, ref Rect lprcMonitor, IntPtr data) => { - MONITORINFO monitorInfo = MONITORINFO.CreateMONITORINFO(); + MONITORINFO monitorInfo = MONITORINFO.Create(); if (GetMonitorInfo(monitor,ref monitorInfo)) { RECT bounds = monitorInfo.rcMonitor; diff --git a/src/Windows/Avalonia.Win32/WindowImpl.cs b/src/Windows/Avalonia.Win32/WindowImpl.cs index 114a57eb6d..45120fa21b 100644 --- a/src/Windows/Avalonia.Win32/WindowImpl.cs +++ b/src/Windows/Avalonia.Win32/WindowImpl.cs @@ -837,7 +837,7 @@ namespace Avalonia.Win32 if (monitor != IntPtr.Zero) { - MONITORINFO monitorInfo = MONITORINFO.CreateMONITORINFO(); + MONITORINFO monitorInfo = MONITORINFO.Create(); if (GetMonitorInfo(monitor,ref monitorInfo)) {