From 3676322352b7a5199710ec1185c09087cc490912 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Sat, 9 Nov 2019 10:48:18 +0000 Subject: [PATCH] Revert "Merge pull request #3221 from mstr2/undecorated-window" This reverts commit 7f7471eaa17f135aeaa0fe316c3f8b311fb1fd0d. --- .../Interop/UnmanagedMethods.cs | 3 --- src/Windows/Avalonia.Win32/WindowImpl.cs | 23 +++++++++---------- 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs b/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs index 36ee37c35a..2c6425e26c 100644 --- a/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs +++ b/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs @@ -921,9 +921,6 @@ namespace Avalonia.Win32.Interop [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "SetWindowTextW")] public static extern bool SetWindowText(IntPtr hwnd, string lpString); - - [DllImport("uxtheme.dll", SetLastError = true, CharSet = CharSet.Unicode)] - public static extern HRESULT SetWindowTheme(IntPtr hwnd, string subAppName, string subIdList); public enum ClassLongIndex : int { diff --git a/src/Windows/Avalonia.Win32/WindowImpl.cs b/src/Windows/Avalonia.Win32/WindowImpl.cs index f0aab99fe2..9a6dd998ba 100644 --- a/src/Windows/Avalonia.Win32/WindowImpl.cs +++ b/src/Windows/Avalonia.Win32/WindowImpl.cs @@ -968,20 +968,26 @@ namespace Avalonia.Win32 { var oldDecorated = _decorated; + var oldThickness = BorderThickness; + change(); var style = (WindowStyles)GetWindowLong(_hwnd, (int)WindowLongParam.GWL_STYLE); + const WindowStyles controlledFlags = WindowStyles.WS_OVERLAPPEDWINDOW; + + style = style | controlledFlags ^ controlledFlags; + style |= WindowStyles.WS_OVERLAPPEDWINDOW; if (!_decorated) { - style &= ~WindowStyles.WS_SYSMENU; + style ^= (WindowStyles.WS_CAPTION | WindowStyles.WS_SYSMENU); } if (!_resizable) { - style &= ~WindowStyles.WS_SIZEFRAME; + style ^= (WindowStyles.WS_SIZEFRAME); } GetClientRect(_hwnd, out var oldClientRect); @@ -989,6 +995,7 @@ namespace Avalonia.Win32 ClientToScreen(_hwnd, ref oldClientRectOrigin); oldClientRect.Offset(oldClientRectOrigin); + SetWindowLong(_hwnd, (int)WindowLongParam.GWL_STYLE, (uint)style); UnmanagedMethods.GetWindowRect(_hwnd, out var windowRect); @@ -997,16 +1004,8 @@ namespace Avalonia.Win32 { var newRect = oldClientRect; if (_decorated) - { - SetWindowTheme(_hwnd, null, null); - AdjustWindowRectEx( - ref newRect, (uint)style, false, GetWindowLong(_hwnd, (int)WindowLongParam.GWL_EXSTYLE)); - } - else - { - SetWindowTheme(_hwnd, "", ""); - } - + AdjustWindowRectEx(ref newRect, (uint)style, false, + GetWindowLong(_hwnd, (int)WindowLongParam.GWL_EXSTYLE)); SetWindowPos(_hwnd, IntPtr.Zero, newRect.left, newRect.top, newRect.Width, newRect.Height, SetWindowPosFlags.SWP_NOZORDER | SetWindowPosFlags.SWP_NOACTIVATE | SetWindowPosFlags.SWP_FRAMECHANGED); frameUpdated = true;