浏览代码

add WindowState to window properties in win32 window impl (#13536)

Emmanuel Hansen 1 年之前
父节点
当前提交
56d2d0cc8a
共有 2 个文件被更改,包括 12 次插入3 次删除
  1. 6 0
      src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs
  2. 6 3
      src/Windows/Avalonia.Win32/WindowImpl.cs

+ 6 - 0
src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs

@@ -615,6 +615,12 @@ namespace Avalonia.Win32
                         {
                         {
                             _lastWindowState = windowState;
                             _lastWindowState = windowState;
 
 
+                            var newWindowProperties = _windowProperties;
+
+                            newWindowProperties.WindowState = windowState;
+
+                            UpdateWindowProperties(newWindowProperties);
+
                             WindowStateChanged?.Invoke(windowState);
                             WindowStateChanged?.Invoke(windowState);
 
 
                             if (_isClientAreaExtended)
                             if (_isClientAreaExtended)

+ 6 - 3
src/Windows/Avalonia.Win32/WindowImpl.cs

@@ -1087,6 +1087,8 @@ namespace Avalonia.Win32
                     throw new ArgumentException("Invalid WindowState.");
                     throw new ArgumentException("Invalid WindowState.");
             }
             }
 
 
+            newWindowProperties.WindowState = state;
+
             UpdateWindowProperties(newWindowProperties);
             UpdateWindowProperties(newWindowProperties);
 
 
             if (command.HasValue)
             if (command.HasValue)
@@ -1292,7 +1294,7 @@ namespace Avalonia.Win32
                 if (IsWindowVisible(_hwnd))
                 if (IsWindowVisible(_hwnd))
                     style |= WindowStyles.WS_VISIBLE;
                     style |= WindowStyles.WS_VISIBLE;
 
 
-                if (newProperties.IsResizable)
+                if (newProperties.IsResizable || newProperties.WindowState == WindowState.Maximized)
                 {
                 {
                     style |= WindowStyles.WS_SIZEFRAME;
                     style |= WindowStyles.WS_SIZEFRAME;
                     style |= WindowStyles.WS_MAXIMIZEBOX;
                     style |= WindowStyles.WS_MAXIMIZEBOX;
@@ -1303,7 +1305,7 @@ namespace Avalonia.Win32
                     style &= ~WindowStyles.WS_MAXIMIZEBOX;
                     style &= ~WindowStyles.WS_MAXIMIZEBOX;
                 }
                 }
 
 
-                const WindowStyles fullDecorationFlags = WindowStyles.WS_CAPTION | WindowStyles.WS_SYSMENU;
+                const WindowStyles fullDecorationFlags = WindowStyles.WS_CAPTION | WindowStyles.WS_SYSMENU | WindowStyles.WS_THICKFRAME | WindowStyles.WS_BORDER;
 
 
                 if (newProperties.Decorations == SystemDecorations.Full)
                 if (newProperties.Decorations == SystemDecorations.Full)
                 {
                 {
@@ -1313,7 +1315,7 @@ namespace Avalonia.Win32
                 {
                 {
                     style &= ~fullDecorationFlags;
                     style &= ~fullDecorationFlags;
 
 
-                    if (newProperties.Decorations == SystemDecorations.BorderOnly && WindowState != WindowState.Maximized)
+                    if (newProperties.Decorations == SystemDecorations.BorderOnly && newProperties.WindowState != WindowState.Maximized)
                     {
                     {
                         style |= WindowStyles.WS_THICKFRAME | WindowStyles.WS_BORDER;
                         style |= WindowStyles.WS_THICKFRAME | WindowStyles.WS_BORDER;
                     }
                     }
@@ -1487,6 +1489,7 @@ namespace Avalonia.Win32
             public bool IsResizable;
             public bool IsResizable;
             public SystemDecorations Decorations;
             public SystemDecorations Decorations;
             public bool IsFullScreen;
             public bool IsFullScreen;
+            public WindowState WindowState;
         }
         }
 
 
         private struct ResizeReasonScope : IDisposable
         private struct ResizeReasonScope : IDisposable