From 00347b48f9144b4d3a988ed44d5e98c5815a8bc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E9=80=89=E8=87=A3?= Date: Fri, 17 Feb 2023 10:37:05 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=91=BE=20=E4=BF=AE=E5=A4=8D=E4=BA=86?= =?UTF-8?q?=E4=B8=80=E4=BA=9B=E7=AA=97=E4=BD=93=E6=B8=B2=E6=9F=93=E6=96=B9?= =?UTF-8?q?=E9=9D=A2=E7=9A=84BUG=20/=20=F0=9F=8E=89=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E4=BA=86=20Subprocess=20=E7=A4=BA=E4=BE=8B=E4=B8=AD=20DemoWind?= =?UTF-8?q?ow=20=E5=AF=B9=E8=B1=A1=E6=B2=A1=E6=B3=A8=E5=86=8C=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Demo/FormiumClient/FormiumClient.csproj | 8 ++- src/Demo/FormiumClient/MainWindow.cs | 9 ++- src/Demo/FormiumClient/Program.cs | 2 +- .../FormiumClient/Properties/AssemblyInfo.cs | 0 src/Demo/FormiumClient/StartupWindow.cs | 6 ++ .../WindowBindingExample/DemoWindowBinding.cs | 2 +- .../FormiumClientSubprocess.csproj | 7 +- src/Demo/FormiumClientSubprocess/Program.cs | 4 +- .../Formium/Formium.Browser.cs | 12 +--- .../Formium/Formium.HostWindow.cs | 36 +++++++++- src/NetDimension.NanUI/Formium/Formium.cs | 12 ++++ .../HostWindow/DwmFramelessHostWindow.cs | 32 +++++++-- .../HostWindow/LayeredStyleHostWindow.cs | 2 +- .../JavaScriptPropertyHandlerOnBrowserSide.cs | 2 +- .../Runtime/RuntimeContext.cs | 5 +- src/NetDimension.NanUI/WinFormium.cs | 3 +- .../Custom/BorderlessWindow.Overrides.cs | 20 +++--- .../Custom/BorderlessWindow.WindowsMessage.cs | 72 ++++++++++++++----- .../Custom/BorderlessWindow.cs | 2 + 19 files changed, 176 insertions(+), 60 deletions(-) create mode 100644 src/Demo/FormiumClient/Properties/AssemblyInfo.cs diff --git a/src/Demo/FormiumClient/FormiumClient.csproj b/src/Demo/FormiumClient/FormiumClient.csproj index 153bf4eb..b4708632 100644 --- a/src/Demo/FormiumClient/FormiumClient.csproj +++ b/src/Demo/FormiumClient/FormiumClient.csproj @@ -7,14 +7,16 @@ Resources\AppIcon.ico WinExe app.manifest - NanUI Formium Demo Client - FormiumClient - NanUI FormiumClient + NanUI Formium Demo Client + NanUI 示例程序 + $(AssemblyName) + $(AssemblyName) True AnyCPU warnings enable AnyCPU;x64;x86 + $(BinDir)\$(MSBuildProjectName)\ diff --git a/src/Demo/FormiumClient/MainWindow.cs b/src/Demo/FormiumClient/MainWindow.cs index ad5369c2..26f3ccd0 100644 --- a/src/Demo/FormiumClient/MainWindow.cs +++ b/src/Demo/FormiumClient/MainWindow.cs @@ -20,7 +20,7 @@ public MainWindow() // 在此处设置窗体的各种属性 MinimumSize = new Size(720, 480); - Size = new Size(1280, 800); + Size = new Size(1280, 720); StartPosition = FormStartPosition.CenterScreen; @@ -28,10 +28,10 @@ public MainWindow() // 设置 Borderless 样式窗体的各项扩展属性,需要注意泛型T需要对应正确的WindowType var style = UseExtendedStyles(); //style.ShadowColor = ColorTranslator.FromHtml("#8B6A91"); - //style.InactiveShadowColor = ColorTranslator.FromHtml("#EE3a3a3a"); + style.InactiveShadowColor = ColorTranslator.FromHtml("#EE3a3a3a"); style.ShadowColor = ColorTranslator.FromHtml("#EE3a3a3a"); - style.ShadowEffect = ShadowEffect.Huge; - style.CornerStyle = CornerStyle.Small; + style.ShadowEffect = ShadowEffect.Big; + style.CornerStyle = CornerStyle.Tiny; // Set up Splash styles // 设置启动画面的各种参数 @@ -120,7 +120,6 @@ protected override void OnReady() // Register event handler when keyboard is pressed // 注册按键事件 KeyEvent += MainWindow_KeyEvent; - } diff --git a/src/Demo/FormiumClient/Program.cs b/src/Demo/FormiumClient/Program.cs index 2849a4e2..9943173a 100644 --- a/src/Demo/FormiumClient/Program.cs +++ b/src/Demo/FormiumClient/Program.cs @@ -82,7 +82,7 @@ public static void Main() // Enable single instance mode // 启用单例 - //app.UseSingleInstance((processId) => { + //app.UseSingleInstance((processId) => { // // processId - 为已在运行中的进程实例ID // // processId - The Id of the running instance //}); diff --git a/src/Demo/FormiumClient/Properties/AssemblyInfo.cs b/src/Demo/FormiumClient/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..e69de29b diff --git a/src/Demo/FormiumClient/StartupWindow.cs b/src/Demo/FormiumClient/StartupWindow.cs index 3a20c060..d5832dad 100644 --- a/src/Demo/FormiumClient/StartupWindow.cs +++ b/src/Demo/FormiumClient/StartupWindow.cs @@ -21,6 +21,12 @@ public StartupWindow() AllowFullScreen = false; EnableSplashScreen = false; AllowSystemMenu = false; + + //var style = UseExtendedStyles(); + + //style.ShadowEffect = ShadowEffect.Glow; + //style.CornerStyle = CornerStyle.Tiny; + } protected override void OnReady() diff --git a/src/Demo/FormiumClient/WindowBindingExample/DemoWindowBinding.cs b/src/Demo/FormiumClient/WindowBindingExample/DemoWindowBinding.cs index e00879b9..ebcf138b 100644 --- a/src/Demo/FormiumClient/WindowBindingExample/DemoWindowBinding.cs +++ b/src/Demo/FormiumClient/WindowBindingExample/DemoWindowBinding.cs @@ -4,7 +4,7 @@ namespace FormiumClient; -internal class DemoWindowBinding : JavaScriptWindowBindingObject +public class DemoWindowBinding : JavaScriptWindowBindingObject { public override string Name { get; } = "Example/DemoWindow"; public override string JavaScriptCode { get; } = Properties.Resources.DemoWindowBinding; diff --git a/src/Demo/FormiumClientSubprocess/FormiumClientSubprocess.csproj b/src/Demo/FormiumClientSubprocess/FormiumClientSubprocess.csproj index efe70707..47e83b9e 100644 --- a/src/Demo/FormiumClientSubprocess/FormiumClientSubprocess.csproj +++ b/src/Demo/FormiumClientSubprocess/FormiumClientSubprocess.csproj @@ -6,12 +6,14 @@ enable enable 10.0 - $(BinDir)\FormiumClient + $(AssemblyName) + NanUI Formium Demo Subprocess + NanUI 示例程序子进程 app.manifest AppIcon.ico FormiumClientSubprocess.Program True - + $(BinDir)\FormiumClient @@ -28,6 +30,7 @@ + \ No newline at end of file diff --git a/src/Demo/FormiumClientSubprocess/Program.cs b/src/Demo/FormiumClientSubprocess/Program.cs index 16d381e0..573f2921 100644 --- a/src/Demo/FormiumClientSubprocess/Program.cs +++ b/src/Demo/FormiumClientSubprocess/Program.cs @@ -10,6 +10,8 @@ internal static class Program [STAThread] static void Main() { - WinFormium.CreateRuntimeBuilder(app => { }).Build().RunAsSubprocess(); + WinFormium.CreateRuntimeBuilder(app => { + app.RegisterJavaScriptWindowBinding(() => new FormiumClient.DemoWindowBinding()); + }).Build().RunAsSubprocess(); } } diff --git a/src/NetDimension.NanUI/Formium/Formium.Browser.cs b/src/NetDimension.NanUI/Formium/Formium.Browser.cs index f70544dc..ce7b087c 100644 --- a/src/NetDimension.NanUI/Formium/Formium.Browser.cs +++ b/src/NetDimension.NanUI/Formium/Formium.Browser.cs @@ -30,15 +30,9 @@ partial class Formium internal void CreateBrowser() { - var browserSettings = OnCreateBrowserSettings(); - if (browserSettings == null) - { - browserSettings = WinFormium.DefaultBrowserSettings; - } - - WebView = new FormiumWebView(this, browserSettings, StartUrl); + WebView = new FormiumWebView(this, _browserSettings, StartUrl); WindowInfo = CefWindowInfo.Create(); @@ -342,7 +336,7 @@ internal void ResizeWebView() } else { - + if (IsWindowVisible(HostWindowHandle)) { SetWindowPos(BrowserWindowHandle, HWND.NULL, 0, 0, rect.Width, rect.Height, SetWindowPosFlags.SWP_NOZORDER | SetWindowPosFlags.SWP_SHOWWINDOW | SetWindowPosFlags.SWP_NOACTIVATE); @@ -523,7 +517,7 @@ public void Reload(bool forceReload = false) } /// - /// Load page from the + /// Load page from the /// /// public void LoadUrl(string url) diff --git a/src/NetDimension.NanUI/Formium/Formium.HostWindow.cs b/src/NetDimension.NanUI/Formium/Formium.HostWindow.cs index 5eaaf8d8..2d95a31f 100644 --- a/src/NetDimension.NanUI/Formium/Formium.HostWindow.cs +++ b/src/NetDimension.NanUI/Formium/Formium.HostWindow.cs @@ -1,6 +1,7 @@ namespace NetDimension.NanUI; using System; +using System.Runtime.InteropServices; using NetDimension.NanUI.HostWindow; using Vanara.PInvoke; @@ -555,21 +556,28 @@ internal void CreateHostWindow() { Form innerWindow = null; + var defaultColor = _browserSettings.BackgroundColor; switch (WindowType) { case HostWindowType.System: innerWindow = new StandardHostWindow(this); + innerWindow.BackColor = Color.FromArgb(0xff, defaultColor.R, defaultColor.G, defaultColor.B); + _currentHostWindowStyle = new SystemWindowStyle(innerWindow); break; case HostWindowType.SystemBorderless: innerWindow = new DwmFramelessHostWindow(this); + innerWindow.BackColor = Color.FromArgb(0xff, defaultColor.R, defaultColor.G, defaultColor.B); + _currentHostWindowStyle = new SystemBorderlessWindowStyle(innerWindow); break; case HostWindowType.Borderless: innerWindow = new FramelessHostWindow(this); + innerWindow.BackColor = Color.FromArgb(0xff, defaultColor.R, defaultColor.G, defaultColor.B); + _currentHostWindowStyle = new BorderlessWindowStyle(innerWindow); break; @@ -577,6 +585,8 @@ internal void CreateHostWindow() Sizable = false; AllowFullScreen = false; innerWindow = new StandardHostWindow(this); + innerWindow.BackColor = Color.FromArgb(0xff, defaultColor.R, defaultColor.G, defaultColor.B); + _currentHostWindowStyle = new KioskWindowStyle(innerWindow); innerWindow.FormBorderStyle = FormBorderStyle.None; innerWindow.WindowState = FormWindowState.Maximized; @@ -595,6 +605,9 @@ internal void CreateHostWindow() FormBorderStyle = FormBorderStyle.FixedSingle }; + innerWindow.BackColor = Color.FromArgb(defaultColor.A, defaultColor.R, defaultColor.G, defaultColor.B); + + WinFormium.DefaultBrowserSettings.WindowlessFrameRate = 60; _currentHostWindowStyle = new LayeredWindowStyle(innerWindow); @@ -610,6 +623,11 @@ internal void CreateHostWindow() + + + + + FormHostWindow = innerWindow; @@ -771,12 +789,26 @@ private bool OnHostWindowWndProc(ref Message m) const string FORMIUM_ACTIVATED = "formium-app-activated"; const string FORMIUM_DEACTIVATE = "formium-app-deactivate"; - if (m.Msg == (int)WindowMessage.WM_SIZE) + if (m.Msg == (int)WindowMessage.WM_SIZE || m.Msg == (int)WindowMessage.WM_WINDOWPOSCHANGED) { ResizeWebView(); } - if(m.Msg == (int)WindowMessage.WM_ACTIVATEAPP) + //if(m.Msg == (int)WindowMessage.WM_WINDOWPOSCHANGED) + //{ + // var windowpos = Marshal.PtrToStructure(m.LParam); + + // if((windowpos.flags & SetWindowPosFlags.SWP_NOSIZE)!= SetWindowPosFlags.SWP_NOSIZE) + // { + // ResizeWebView(); + + // } + + + + //} + + if (m.Msg == (int)WindowMessage.WM_ACTIVATEAPP) { var isAppActivate = false; diff --git a/src/NetDimension.NanUI/Formium/Formium.cs b/src/NetDimension.NanUI/Formium/Formium.cs index 7e583484..4cf5f3d1 100644 --- a/src/NetDimension.NanUI/Formium/Formium.cs +++ b/src/NetDimension.NanUI/Formium/Formium.cs @@ -49,15 +49,27 @@ public abstract partial class Formium /// protected ServiceContainer IoC => WinFormium.Runtime?.Container; + private CefBrowserSettings _browserSettings; public Formium() { + _browserSettings = OnCreateBrowserSettings(); + + + if (_browserSettings == null) + { + _browserSettings = WinFormium.DefaultBrowserSettings; + } + InitializeFormium(); } + private void InitializeFormium() { + + CreateHostWindow(); } diff --git a/src/NetDimension.NanUI/HostWindow/DwmFramelessHostWindow.cs b/src/NetDimension.NanUI/HostWindow/DwmFramelessHostWindow.cs index 43ce51d2..7c7db242 100644 --- a/src/NetDimension.NanUI/HostWindow/DwmFramelessHostWindow.cs +++ b/src/NetDimension.NanUI/HostWindow/DwmFramelessHostWindow.cs @@ -17,6 +17,12 @@ public DwmFramelessHostWindow(Formium formium) InitializeReflectedFields(); + + SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true); + SetStyle(ControlStyles.ResizeRedraw, false); + + + } public WindowMessageDelegate OnWindowsMessage { get; set; } public WindowMessageDelegate OnDefWindowsMessage { get; set; } @@ -27,7 +33,8 @@ protected override void OnHandleCreated(EventArgs e) { base.OnHandleCreated(e); - //DwmSetWindowAttribute(hWnd, DWMWINDOWATTRIBUTE.DWMWA_NCRENDERING_POLICY, DWMNCRENDERINGPOLICY.DWMNCRP_ENABLED); + + DwmSetWindowAttribute(hWnd, DWMWINDOWATTRIBUTE.DWMWA_NCRENDERING_POLICY, DWMNCRENDERINGPOLICY.DWMNCRP_ENABLED); //DwmExtendFrameIntoClientArea(hWnd, new MARGINS(0, this.Width, 0, this.Height)); @@ -47,6 +54,9 @@ private void AdjustWindowRect(ref RECT rect, WindowStyles style, WindowStylesEx AdjustWindowRectEx(ref rect, style, false, exStyle); } } + + + internal Padding GetNonClientAeraBorders() { var rect = RECT.Empty; @@ -75,22 +85,36 @@ protected override void WndProc(ref Message m) { if (m.Msg == (int)WindowMessage.WM_NCCALCSIZE && m.WParam != IntPtr.Zero) { + var nccsp = Marshal.PtrToStructure(m.LParam); + if (IsZoomed(hWnd)) { - var nccsp = Marshal.PtrToStructure(m.LParam); var ncBorders = GetNonClientAeraBorders(); + nccsp.rgrc1 = nccsp.rgrc0; nccsp.rgrc0.top -= ncBorders.Top; nccsp.rgrc0.top += ncBorders.Bottom; - Marshal.StructureToPtr(nccsp, m.LParam, false); + m.Result = (IntPtr)0x0400; + + Marshal.StructureToPtr(nccsp, m.LParam, true); + base.WndProc(ref m); } else { + nccsp.rgrc0.top -= 1; + nccsp.rgrc0.bottom += 1; + nccsp.rgrc0.left -= 1; + nccsp.rgrc0.right += 1; + m.Result = IntPtr.Zero; + + Marshal.StructureToPtr(nccsp, m.LParam, true); } + + return; } @@ -108,7 +132,7 @@ protected override void WndProc(ref Message m) } } - if(m.Msg == (int)WindowMessage.WM_PAINT) + if (m.Msg == (int)WindowMessage.WM_PAINT) { var hdc = BeginPaint(hWnd, out var ps); diff --git a/src/NetDimension.NanUI/HostWindow/LayeredStyleHostWindow.cs b/src/NetDimension.NanUI/HostWindow/LayeredStyleHostWindow.cs index 6a1599bf..f7064326 100644 --- a/src/NetDimension.NanUI/HostWindow/LayeredStyleHostWindow.cs +++ b/src/NetDimension.NanUI/HostWindow/LayeredStyleHostWindow.cs @@ -1,4 +1,4 @@ -using Xilium.CefGlue; + using Xilium.CefGlue; using static Vanara.PInvoke.User32; namespace NetDimension.NanUI.HostWindow; diff --git a/src/NetDimension.NanUI/JavaScript/Extensions/JavaScriptProperties/JavaScriptPropertyHandlerOnBrowserSide.cs b/src/NetDimension.NanUI/JavaScript/Extensions/JavaScriptProperties/JavaScriptPropertyHandlerOnBrowserSide.cs index 830fb2e8..c7794175 100644 --- a/src/NetDimension.NanUI/JavaScript/Extensions/JavaScriptProperties/JavaScriptPropertyHandlerOnBrowserSide.cs +++ b/src/NetDimension.NanUI/JavaScript/Extensions/JavaScriptProperties/JavaScriptPropertyHandlerOnBrowserSide.cs @@ -55,7 +55,7 @@ private MessageResponse OnObjectSetProperty(MessageRequest request) string name = data.Name; Guid propUuid = data.Uuid; Guid objUuid = data.ObjectUuid; - JavaScriptValue value = JavaScriptValue.FromJson((string)data.Value); + var value = JavaScriptValue.FromJson((string)data.Value); var target = JavaScriptProperty.Bag.SingleOrDefault(x => x.Uuid == propUuid); diff --git a/src/NetDimension.NanUI/Runtime/RuntimeContext.cs b/src/NetDimension.NanUI/Runtime/RuntimeContext.cs index d87ab40e..ac5986c1 100644 --- a/src/NetDimension.NanUI/Runtime/RuntimeContext.cs +++ b/src/NetDimension.NanUI/Runtime/RuntimeContext.cs @@ -109,6 +109,8 @@ internal int InitializeProcessOnly() var exitCode = CefRuntime.ExecuteProcess(cefMainArgs, app, IntPtr.Zero); + //ApplicationConfiguration.UseExtensions[(int)ExtensionExecutePosition.BrowserProcessInitialized]?.Invoke(this, ApplicationProperties); + return exitCode; } @@ -208,11 +210,12 @@ This project is under MIT License. settings.BrowserSubprocessPath = ChromiumEnvironment.SubprocessPath; } - CefRuntime.Initialize(new CefMainArgs(args), settings, app, IntPtr.Zero); ApplicationConfiguration.UseExtensions[(int)ExtensionExecutePosition.BrowserProcessInitialized]?.Invoke(this, ApplicationProperties); + + foreach (var config in CustomResourceHandlerConfigurations) { config.OnResourceHandlerRegister(); diff --git a/src/NetDimension.NanUI/WinFormium.cs b/src/NetDimension.NanUI/WinFormium.cs index d9be3788..c12a7394 100644 --- a/src/NetDimension.NanUI/WinFormium.cs +++ b/src/NetDimension.NanUI/WinFormium.cs @@ -93,7 +93,8 @@ public static CefBrowserSettings DefaultBrowserSettings { _defaultBrowserSettings = new CefBrowserSettings() { - WindowlessFrameRate = 30, + WindowlessFrameRate = 60, + }; } return _defaultBrowserSettings; diff --git a/src/NetDimension.NanUI/third_party_libraries/NetDimension.Shiva/Custom/BorderlessWindow.Overrides.cs b/src/NetDimension.NanUI/third_party_libraries/NetDimension.Shiva/Custom/BorderlessWindow.Overrides.cs index 59eb46b9..0dedeffb 100644 --- a/src/NetDimension.NanUI/third_party_libraries/NetDimension.Shiva/Custom/BorderlessWindow.Overrides.cs +++ b/src/NetDimension.NanUI/third_party_libraries/NetDimension.Shiva/Custom/BorderlessWindow.Overrides.cs @@ -22,17 +22,15 @@ public BorderlessWindow() AutoScaleMode = AutoScaleMode.None; - //SetStyle( - // ControlStyles.AllPaintingInWmPaint | - // ControlStyles.UserPaint | - // ControlStyles.OptimizedDoubleBuffer - //, true); + SetStyle( + ControlStyles.AllPaintingInWmPaint | + ControlStyles.UserPaint | + ControlStyles.OptimizedDoubleBuffer + , true); //DoubleBuffered = true; - SetStyle(ControlStyles.ResizeRedraw, false); - - BackColor = Color.Black; + SetStyle(ControlStyles.ResizeRedraw, true); Padding = Padding.Empty; @@ -50,12 +48,14 @@ protected override void OnHandleCreated(EventArgs e) { base.OnHandleCreated(e); - DwmSetWindowAttribute(hWnd, DWMWINDOWATTRIBUTE.DWMWA_NCRENDERING_POLICY, DWMNCRENDERINGPOLICY.DWMNCRP_ENABLED); - DwmExtendFrameIntoClientArea(hWnd, new MARGINS(0, this.Width, 0, this.Height)); hWnd = new HWND(Handle); + DwmSetWindowAttribute(hWnd, DWMWINDOWATTRIBUTE.DWMWA_NCRENDERING_POLICY, DWMNCRENDERINGPOLICY.DWMNCRP_ENABLED); + + DwmExtendFrameIntoClientArea(hWnd, new MARGINS(0)); + DpiHelper.InitializeDpiHelper(); _deviceDpi = DpiHelper.DeviceDpi; diff --git a/src/NetDimension.NanUI/third_party_libraries/NetDimension.Shiva/Custom/BorderlessWindow.WindowsMessage.cs b/src/NetDimension.NanUI/third_party_libraries/NetDimension.Shiva/Custom/BorderlessWindow.WindowsMessage.cs index ed312748..16396e02 100644 --- a/src/NetDimension.NanUI/third_party_libraries/NetDimension.Shiva/Custom/BorderlessWindow.WindowsMessage.cs +++ b/src/NetDimension.NanUI/third_party_libraries/NetDimension.Shiva/Custom/BorderlessWindow.WindowsMessage.cs @@ -1,6 +1,7 @@ using Vanara.Extensions; using Vanara.PInvoke; +using static Vanara.PInvoke.DwmApi; using static Vanara.PInvoke.User32; namespace NetDimension.NanUI.HostWindow; @@ -43,7 +44,21 @@ protected override void WndProc(ref Message m) } } break; + case (int)WindowMessage.WM_ACTIVATE: + { + base.WndProc(ref m); + DwmExtendFrameIntoClientArea(hWnd, new MARGINS(0)); + } + break; + case (int)WindowMessage.WM_PAINT: + { + if(!WmPaint(ref m)) + { + base.WndProc(ref m); + } + } + break; case (int)WindowMessage.WM_NCPAINT: { if (!WmNCPaint(ref m)) @@ -74,18 +89,31 @@ protected override void WndProc(ref Message m) break; case (int)WindowMessage.WM_ACTIVATEAPP: { + if (!WmActiveApp(ref m)) + { + base.WndProc(ref m); + } + InvalidateNonClientArea(); SendFrameChangedMessage(); + } + break; + case (int)WindowMessage.WM_SHOWWINDOW: + { + base.WndProc(ref m); - if (!WmActiveApp(ref m)) - { + if (WindowState == FormWindowState.Normal) + { - base.WndProc(ref m); + System.Diagnostics.Debug.WriteLine("111"); + using var roundedRect = GetWindowBorderPath(); + SetWindowRegion(roundedRect); } + + } break; - case (int)WindowMessage.WM_NCACTIVATE: { if (!WmNCActive(ref m)) @@ -153,7 +181,6 @@ protected override void WndProc(ref Message m) - private bool WmActiveApp(ref Message m) { @@ -166,12 +193,6 @@ private bool WmActiveApp(ref Message m) { IsApplicationForeground = true; SetApplicationFocus(); - - if (WindowState == FormWindowState.Normal) - { - using var roundedRect = GetWindowBorderPath(); - SetWindowRegion(roundedRect); - } } return false; @@ -200,6 +221,8 @@ private bool WmNCActive(ref Message m) if (isActive) { SetWindowFocus(); + + } else { @@ -226,13 +249,8 @@ private bool WmWindowPosChanged(ref Message m) return false; } - - - private bool WmSize(ref Message m) + private bool WmPaint(ref Message m) { - if (!_isLoaded) - return false; - if (WindowState == FormWindowState.Maximized) { _shouldPerformMaximiazedState = true; @@ -255,6 +273,16 @@ private bool WmSize(ref Message m) RemoveWindowRegion(); } + return false; + } + + + + private bool WmSize(ref Message m) + { + if (!_isLoaded) + return false; + SendFrameChangedMessage(); ResizeShadow(ref m); @@ -278,17 +306,25 @@ private bool WmNCCalcSize(ref Message m) if (m.WParam == TRUE) { var nccsp = Marshal.PtrToStructure(m.LParam); + var ncBorders = GetNonClientAeraBorders(); if (WindowState != FormWindowState.Maximized && WindowState != FormWindowState.Minimized) { + //nccsp.rgrc0.top -= 1; + //nccsp.rgrc0.bottom += 1; + //nccsp.rgrc0.left -= 1; + //nccsp.rgrc0.right += 1; + m.Result = MESSAGE_PROCESS; + //Marshal.StructureToPtr(nccsp, m.LParam, true); + + return true; } else if (WindowState == FormWindowState.Maximized) { - var ncBorders = GetNonClientAeraBorders(); nccsp.rgrc0.top -= ncBorders.Top; nccsp.rgrc0.top += ncBorders.Bottom; diff --git a/src/NetDimension.NanUI/third_party_libraries/NetDimension.Shiva/Custom/BorderlessWindow.cs b/src/NetDimension.NanUI/third_party_libraries/NetDimension.Shiva/Custom/BorderlessWindow.cs index bea17896..0e57005f 100644 --- a/src/NetDimension.NanUI/third_party_libraries/NetDimension.Shiva/Custom/BorderlessWindow.cs +++ b/src/NetDimension.NanUI/third_party_libraries/NetDimension.Shiva/Custom/BorderlessWindow.cs @@ -237,6 +237,8 @@ internal void SetWindowRegion(GraphicsPath pathRegion) Region = new Region(pathRegion); oldRegion?.Dispose(); + + } internal void SetWindowRegion(Rectangle rectangleRegion)