From dbca630b18572adee963cb7e2a4e3ad1b5c42d3a Mon Sep 17 00:00:00 2001 From: David Hall Date: Sat, 8 Jul 2023 08:58:53 -0600 Subject: [PATCH] Added constants to DPI_AWARENESS_CONTEXT per #417 --- PInvoke/User32/WinUser.HighDpi2.cs | 76 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/PInvoke/User32/WinUser.HighDpi2.cs b/PInvoke/User32/WinUser.HighDpi2.cs index c4c8e13b..b9d2a3bb 100644 --- a/PInvoke/User32/WinUser.HighDpi2.cs +++ b/PInvoke/User32/WinUser.HighDpi2.cs @@ -739,6 +739,82 @@ namespace Vanara.PInvoke /// public IntPtr DangerousGetHandle() => handle; + + /// + /// DPI unaware. This window does not scale for DPI changes and is always assumed to have a scale factor of 100% (96 DPI). It + /// will be automatically scaled by the system on any other DPI setting. + /// + public static readonly DPI_AWARENESS_CONTEXT DPI_AWARENESS_CONTEXT_UNAWARE = new(new(-1)); + + /// + /// System DPI aware. This window does not scale for DPI changes. It will query for the DPI once and use that value for the + /// lifetime of the process. If the DPI changes, the process will not adjust to the new DPI value. It will be automatically + /// scaled up or down by the system when the DPI changes from the system value. + /// + public static readonly DPI_AWARENESS_CONTEXT DPI_AWARENESS_CONTEXT_SYSTEM_AWARE = new(new(-2)); + + /// + /// Per monitor DPI aware. This window checks for the DPI when it is created and adjusts the scale factor whenever the DPI + /// changes. These processes are not automatically scaled by the system. + /// + public static readonly DPI_AWARENESS_CONTEXT DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE = new(new(-3)); + + /// + /// + /// Also known as Per Monitor v2. An advancement over the original per-monitor DPI awareness mode, which enables applications to + /// access new DPI-related scaling behaviors on a per top-level window basis. + /// + /// + /// Per Monitor v2 was made available in the Creators Update of Windows 10, and is not available on earlier versions of the + /// operating system. + /// + /// The additional behaviors introduced are as follows: + /// + /// + /// Child window DPI change notifications + /// In Per Monitor v2 contexts, the entire window tree is notified of any DPI changes that occur. + /// + /// + /// Scaling of non-client area + /// + /// All windows will automatically have their non-client area drawn in a DPI sensitive fashion. Calls to + /// EnableNonClientDpiScaling are unnecessary. + /// + /// + /// + /// Scaling of Win32 menus + /// All NTUSER menus created in Per Monitor v2 contexts will be scaling in a per-monitor fashion. + /// + /// + /// Dialog Scaling + /// Win32 dialogs created in Per Monitor v2 contexts will automatically respond to DPI changes. + /// + /// + /// Improved scaling of comctl32 controls + /// Various comctl32 controls have improved DPI scaling behavior in Per Monitor v2 contexts. + /// + /// + /// Improved theming behavior + /// + /// UxTheme handles opened in the context of a Per Monitor v2 window will operate in terms of the DPI associated with that window. + /// + /// + /// + /// + public static readonly DPI_AWARENESS_CONTEXT DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2 = new(new(-4)); + + /// + /// + /// DPI unaware with improved quality of GDI-based content. This mode behaves similarly to DPI_AWARENESS_CONTEXT_UNAWARE, but + /// also enables the system to automatically improve the rendering quality of text and other GDI-based primitives when the window + /// is displayed on a high-DPI monitor. + /// + /// For more details, see Improving the high-DPI experience in GDI-based Desktop apps. + /// + /// DPI_AWARENESS_CONTEXT_UNAWARE_GDISCALED was introduced in the October 2018 update of Windows 10 (also known as version 1809). + /// + /// + public static readonly DPI_AWARENESS_CONTEXT DPI_AWARENESS_CONTEXT_UNAWARE_GDISCALED = new(new(-5)); } } } \ No newline at end of file