|
@@ -31,6 +31,7 @@ namespace Avalonia.Win32
|
|
|
private IInputRoot _owner;
|
|
private IInputRoot _owner;
|
|
|
private bool _trackingMouse;
|
|
private bool _trackingMouse;
|
|
|
private bool _decorated = true;
|
|
private bool _decorated = true;
|
|
|
|
|
+ private bool _resizable = true;
|
|
|
private double _scaling = 1;
|
|
private double _scaling = 1;
|
|
|
private WindowState _showWindowState;
|
|
private WindowState _showWindowState;
|
|
|
private FramebufferManager _framebuffer;
|
|
private FramebufferManager _framebuffer;
|
|
@@ -77,8 +78,8 @@ namespace Avalonia.Win32
|
|
|
{
|
|
{
|
|
|
get
|
|
get
|
|
|
{
|
|
{
|
|
|
- var style = UnmanagedMethods.GetWindowLong(_hwnd, -16);
|
|
|
|
|
- var exStyle = UnmanagedMethods.GetWindowLong(_hwnd, -20);
|
|
|
|
|
|
|
+ var style = UnmanagedMethods.GetWindowLong(_hwnd, (int)UnmanagedMethods.WindowLongParam.GWL_STYLE);
|
|
|
|
|
+ var exStyle = UnmanagedMethods.GetWindowLong(_hwnd, (int)UnmanagedMethods.WindowLongParam.GWL_EXSTYLE);
|
|
|
var padding = new UnmanagedMethods.RECT();
|
|
var padding = new UnmanagedMethods.RECT();
|
|
|
|
|
|
|
|
if (UnmanagedMethods.AdjustWindowRectEx(ref padding, style, false, exStyle))
|
|
if (UnmanagedMethods.AdjustWindowRectEx(ref padding, style, false, exStyle))
|
|
@@ -235,13 +236,19 @@ namespace Avalonia.Win32
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- var style = (UnmanagedMethods.WindowStyles)UnmanagedMethods.GetWindowLong(_hwnd, -16);
|
|
|
|
|
|
|
+ var style = (UnmanagedMethods.WindowStyles)UnmanagedMethods.GetWindowLong(_hwnd, (int)UnmanagedMethods.WindowLongParam.GWL_STYLE);
|
|
|
|
|
|
|
|
- style |= UnmanagedMethods.WindowStyles.WS_OVERLAPPEDWINDOW;
|
|
|
|
|
|
|
+ var systemDecorationStyles = UnmanagedMethods.WindowStyles.WS_OVERLAPPED
|
|
|
|
|
+ | UnmanagedMethods.WindowStyles.WS_CAPTION
|
|
|
|
|
+ | UnmanagedMethods.WindowStyles.WS_SYSMENU
|
|
|
|
|
+ | UnmanagedMethods.WindowStyles.WS_MINIMIZEBOX
|
|
|
|
|
+ | UnmanagedMethods.WindowStyles.WS_MAXIMIZEBOX;
|
|
|
|
|
+
|
|
|
|
|
+ style |= systemDecorationStyles;
|
|
|
|
|
|
|
|
if (!value)
|
|
if (!value)
|
|
|
{
|
|
{
|
|
|
- style ^= UnmanagedMethods.WindowStyles.WS_OVERLAPPEDWINDOW;
|
|
|
|
|
|
|
+ style ^= systemDecorationStyles;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
UnmanagedMethods.RECT windowRect;
|
|
UnmanagedMethods.RECT windowRect;
|
|
@@ -251,7 +258,7 @@ namespace Avalonia.Win32
|
|
|
Rect newRect;
|
|
Rect newRect;
|
|
|
var oldThickness = BorderThickness;
|
|
var oldThickness = BorderThickness;
|
|
|
|
|
|
|
|
- UnmanagedMethods.SetWindowLong(_hwnd, -16, (uint)style);
|
|
|
|
|
|
|
+ UnmanagedMethods.SetWindowLong(_hwnd, (int)UnmanagedMethods.WindowLongParam.GWL_STYLE, (uint)style);
|
|
|
|
|
|
|
|
if (value)
|
|
if (value)
|
|
|
{
|
|
{
|
|
@@ -798,11 +805,11 @@ namespace Avalonia.Win32
|
|
|
|
|
|
|
|
public void ShowTaskbarIcon(bool value)
|
|
public void ShowTaskbarIcon(bool value)
|
|
|
{
|
|
{
|
|
|
- var style = (UnmanagedMethods.WindowStyles)UnmanagedMethods.GetWindowLong(_hwnd, -20);
|
|
|
|
|
-
|
|
|
|
|
- style &= ~(UnmanagedMethods.WindowStyles.WS_VISIBLE);
|
|
|
|
|
|
|
+ var style = (UnmanagedMethods.WindowStyles)UnmanagedMethods.GetWindowLong(_hwnd, (int)UnmanagedMethods.WindowLongParam.GWL_EXSTYLE);
|
|
|
|
|
|
|
|
- style |= UnmanagedMethods.WindowStyles.WS_EX_TOOLWINDOW;
|
|
|
|
|
|
|
+ style &= ~(UnmanagedMethods.WindowStyles.WS_VISIBLE);
|
|
|
|
|
+
|
|
|
|
|
+ style |= UnmanagedMethods.WindowStyles.WS_EX_TOOLWINDOW;
|
|
|
if (value)
|
|
if (value)
|
|
|
style |= UnmanagedMethods.WindowStyles.WS_EX_APPWINDOW;
|
|
style |= UnmanagedMethods.WindowStyles.WS_EX_APPWINDOW;
|
|
|
else
|
|
else
|
|
@@ -813,9 +820,27 @@ namespace Avalonia.Win32
|
|
|
{
|
|
{
|
|
|
//Toggle to make the styles stick
|
|
//Toggle to make the styles stick
|
|
|
UnmanagedMethods.ShowWindow(_hwnd, ShowWindowCommand.Hide);
|
|
UnmanagedMethods.ShowWindow(_hwnd, ShowWindowCommand.Hide);
|
|
|
- UnmanagedMethods.SetWindowLong(_hwnd, -20, (uint)style);
|
|
|
|
|
|
|
+ UnmanagedMethods.SetWindowLong(_hwnd, (int)UnmanagedMethods.WindowLongParam.GWL_EXSTYLE, (uint)style);
|
|
|
UnmanagedMethods.ShowWindow(_hwnd, windowPlacement.ShowCmd);
|
|
UnmanagedMethods.ShowWindow(_hwnd, windowPlacement.ShowCmd);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ public void CanResize(bool value)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (value == _resizable)
|
|
|
|
|
+ {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ var style = (UnmanagedMethods.WindowStyles)UnmanagedMethods.GetWindowLong(_hwnd, (int)UnmanagedMethods.WindowLongParam.GWL_STYLE);
|
|
|
|
|
+
|
|
|
|
|
+ if (value)
|
|
|
|
|
+ style |= UnmanagedMethods.WindowStyles.WS_SIZEFRAME;
|
|
|
|
|
+ else
|
|
|
|
|
+ style &= ~(UnmanagedMethods.WindowStyles.WS_SIZEFRAME);
|
|
|
|
|
+
|
|
|
|
|
+ UnmanagedMethods.SetWindowLong(_hwnd, (int)UnmanagedMethods.WindowLongParam.GWL_STYLE, (uint)style);
|
|
|
|
|
+ _resizable = value;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|