diff --git a/src/Shared/HandyControl_Shared/Controls/Window/BlurWindow.cs b/src/Shared/HandyControl_Shared/Controls/Window/BlurWindow.cs index 514e88e8..f9fccead 100644 --- a/src/Shared/HandyControl_Shared/Controls/Window/BlurWindow.cs +++ b/src/Shared/HandyControl_Shared/Controls/Window/BlurWindow.cs @@ -1,4 +1,6 @@ -using System.Runtime.InteropServices; +using System; +using System.Runtime.InteropServices; +using System.Windows.Interop; using HandyControl.Data; using HandyControl.Tools; using HandyControl.Tools.Helper; @@ -8,13 +10,41 @@ namespace HandyControl.Controls { public class BlurWindow : Window { + private static readonly int WM_EXITSIZEMOVE = 0x0232; + private static readonly int WM_ENTERSIZEMOVE = 0x0231; + + public BlurWindow() + { + var versionInfo = SystemHelper.GetSystemVersionInfo(); + + if (versionInfo >= SystemVersionInfo.Windows10_1903) + { + var source = HwndSource.FromHwnd(WindowHelper.GetHandle(this)); + source.AddHook(WndProc); + } + } + + private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) + { + if (msg == WM_ENTERSIZEMOVE) + { + EnableBlur(this, false); + } + else if (msg == WM_EXITSIZEMOVE) + { + EnableBlur(this); + } + + return IntPtr.Zero; + } + public override void OnApplyTemplate() { base.OnApplyTemplate(); EnableBlur(this); } - internal static void EnableBlur(Window window) + internal static void EnableBlur(Window window, bool isEnabled = true) { var versionInfo = SystemHelper.GetSystemVersionInfo(); @@ -23,21 +53,24 @@ namespace HandyControl.Controls accentPolicy.AccentFlags = 2; - if (versionInfo >= SystemVersionInfo.Windows10_1903) + if (isEnabled) { - accentPolicy.AccentState = InteropValues.ACCENTSTATE.ACCENT_ENABLE_BLURBEHIND; - } - else if (versionInfo >= SystemVersionInfo.Windows10_1809) - { - accentPolicy.AccentState = InteropValues.ACCENTSTATE.ACCENT_ENABLE_ACRYLICBLURBEHIND; - } - else if (versionInfo >= SystemVersionInfo.Windows10) - { - accentPolicy.AccentState = InteropValues.ACCENTSTATE.ACCENT_ENABLE_BLURBEHIND; + if (versionInfo >= SystemVersionInfo.Windows10_1809) + { + accentPolicy.AccentState = InteropValues.ACCENTSTATE.ACCENT_ENABLE_ACRYLICBLURBEHIND; + } + else if (versionInfo >= SystemVersionInfo.Windows10) + { + accentPolicy.AccentState = InteropValues.ACCENTSTATE.ACCENT_ENABLE_BLURBEHIND; + } + else + { + accentPolicy.AccentState = InteropValues.ACCENTSTATE.ACCENT_ENABLE_TRANSPARENTGRADIENT; + } } else { - accentPolicy.AccentState = InteropValues.ACCENTSTATE.ACCENT_ENABLE_TRANSPARENTGRADIENT; + accentPolicy.AccentState = InteropValues.ACCENTSTATE.ACCENT_ENABLE_BLURBEHIND; } accentPolicy.GradientColor = ResourceHelper.GetResource(ResourceToken.BlurGradientValue);