From b8cfbc1b9e11f78fe0ad888f848f25791c1dc7d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E7=BA=A2=E5=B2=A9?= Date: Tue, 14 Feb 2023 15:25:02 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=AA=97=E5=8F=A3=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E5=8F=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cef/cef-browser-window-lcl.go | 6 +++++- cef/cef-browser-window-lcl_other.go | 10 +++++----- cef/cef-browser-window-lcl_windows.go | 8 ++++---- cef/cef-browser-window-views-framework.go | 21 +++++++++++++++++++-- cef/cef-browser-window.go | 1 + cef/cef-types-window.go | 12 ++++++++++++ 6 files changed, 46 insertions(+), 12 deletions(-) diff --git a/cef/cef-browser-window-lcl.go b/cef/cef-browser-window-lcl.go index 90ce6ea..db2e061 100644 --- a/cef/cef-browser-window-lcl.go +++ b/cef/cef-browser-window-lcl.go @@ -50,7 +50,7 @@ type LCLBrowserWindow struct { auxTools *auxTools //辅助工具 tray ITray //托盘 hWnd types.HWND // - windowsState types.TWindowState // + windowState types.TWindowState //窗口状态 cwcap *customWindowCaption //自定义窗口标题栏 } @@ -515,6 +515,10 @@ func (m *LCLBrowserWindow) Minimize() { }) } +func (m *LCLBrowserWindow) Restore() { + m.SetWindowState(types.WsNormal) +} + // 关闭带有浏览器的窗口 func (m *LCLBrowserWindow) CloseBrowserWindow() { if m.TForm == nil { diff --git a/cef/cef-browser-window-lcl_other.go b/cef/cef-browser-window-lcl_other.go index ba68abd..e0c04e6 100644 --- a/cef/cef-browser-window-lcl_other.go +++ b/cef/cef-browser-window-lcl_other.go @@ -16,7 +16,7 @@ import ( "github.com/energye/golcl/lcl/types" ) -//TODO no +// TODO no type customWindowCaption struct { bw *LCLBrowserWindow regions *TCefDraggableRegions @@ -26,7 +26,7 @@ func (m *customWindowCaption) free() { //TODO no } -//显示标题栏 +// 显示标题栏 func (m *LCLBrowserWindow) ShowTitle() { if m.TForm == nil { return @@ -34,7 +34,7 @@ func (m *LCLBrowserWindow) ShowTitle() { m.TForm.SetBorderStyle(types.BsSizeable) } -//隐藏标题栏 +// 隐藏标题栏 func (m *LCLBrowserWindow) HideTitle() { if m.TForm == nil { return @@ -50,7 +50,7 @@ func (m *LCLBrowserWindow) registerWindowsCompMsgEvent() { func (m *LCLBrowserWindow) setDraggableRegions() { } -//for other platform maximize and restore +// for other platform maximize and restore func (m *LCLBrowserWindow) Maximize() { if m.TForm == nil { return @@ -61,7 +61,7 @@ func (m *LCLBrowserWindow) Maximize() { if m.windowProperty == nil { m.windowProperty = &WindowProperty{} } - if bs == types.BsNone || bs == types.BsSingle { //不能调整窗口大,所以手动控制窗口大小 + if bs == types.BsNone || bs == types.BsSingle { //不能调整窗口大,所以手动控制窗口状态 var ws = m.WindowState() var redWindowState types.TWindowState //默认状态0 diff --git a/cef/cef-browser-window-lcl_windows.go b/cef/cef-browser-window-lcl_windows.go index aa0de68..b498679 100644 --- a/cef/cef-browser-window-lcl_windows.go +++ b/cef/cef-browser-window-lcl_windows.go @@ -202,8 +202,8 @@ func (m *LCLBrowserWindow) doOnRenderCompMsg(message *types.TMessage, lResult *t *lResult = HTCAPTION *aHandled = true win.ReleaseCapture() - m.windowsState = m.WindowState() - if m.windowsState == types.WsNormal { + m.windowState = m.WindowState() + if m.windowState == types.WsNormal { rtl.PostMessage(m.Handle(), WM_SYSCOMMAND, SC_MAXIMIZE, 0) } else { rtl.PostMessage(m.Handle(), WM_SYSCOMMAND, SC_RESTORE, 0) @@ -303,8 +303,8 @@ func (m *LCLBrowserWindow) Maximize() { } QueueAsyncCall(func(id int) { win.ReleaseCapture() - m.windowsState = m.WindowState() - if m.windowsState == types.WsNormal { + m.windowState = m.WindowState() + if m.windowState == types.WsNormal { rtl.PostMessage(m.Handle(), WM_SYSCOMMAND, SC_MAXIMIZE, 0) } else { rtl.SendMessage(m.Handle(), WM_SYSCOMMAND, SC_RESTORE, 0) diff --git a/cef/cef-browser-window-views-framework.go b/cef/cef-browser-window-views-framework.go index 387b934..c542fd6 100644 --- a/cef/cef-browser-window-views-framework.go +++ b/cef/cef-browser-window-views-framework.go @@ -38,9 +38,10 @@ type ViewsFrameworkBrowserWindow struct { frames TCEFFrame //当前浏览器下的所有frame auxTools *auxTools //辅助工具 tray ITray //托盘 - doOnWindowCreated WindowComponentOnWindowCreated // + doOnWindowCreated WindowComponentOnWindowCreated //窗口创建 doOnGetInitialBounds WindowComponentOnGetInitialBounds //窗口初始bounds regions *TCefDraggableRegions //窗口内html拖拽区域 + windowState types.TWindowState //窗口状态 } // 创建 ViewsFrameworkBrowserWindow 窗口 @@ -467,8 +468,24 @@ func (m *ViewsFrameworkBrowserWindow) Close() { m.WindowComponent().Close() } +func (m *ViewsFrameworkBrowserWindow) WindowState() types.TWindowState { + if m.windowComponent.IsMinimized() { + return types.WsMinimized + } else if m.windowComponent.IsMaximized() { + return types.WsMaximized + } else if m.windowComponent.IsFullscreen() { + return types.WsFullScreen + } + return types.WsNormal +} + func (m *ViewsFrameworkBrowserWindow) Maximize() { - m.WindowComponent().Maximize() + m.windowState = m.WindowState() + if m.windowState == types.WsNormal { + m.WindowComponent().Maximize() + } else { + m.Restore() + } } func (m *ViewsFrameworkBrowserWindow) Minimize() { diff --git a/cef/cef-browser-window.go b/cef/cef-browser-window.go index c9e499a..87c4001 100644 --- a/cef/cef-browser-window.go +++ b/cef/cef-browser-window.go @@ -66,6 +66,7 @@ type IBrowserWindow interface { Hide() //隐藏窗口 Maximize() //窗口最大化 Minimize() //窗口最小化 + Restore() //窗口还原 Close() //关闭窗口 CloseBrowserWindow() //关闭浏览器窗口 WindowType() consts.WINDOW_TYPE //窗口类型 diff --git a/cef/cef-types-window.go b/cef/cef-types-window.go index 7b34678..1487693 100644 --- a/cef/cef-types-window.go +++ b/cef/cef-types-window.go @@ -14,6 +14,7 @@ import ( "github.com/energye/energy/types" "github.com/energye/golcl/energy/emfs" "github.com/energye/golcl/lcl/api" + t "github.com/energye/golcl/lcl/types" "io/ioutil" "unsafe" ) @@ -65,6 +66,17 @@ func (m *ICefWindow) IsAlwaysOnTop() bool { return api.GoBool(r1) } +func (m *ICefWindow) WindowState() t.TWindowState { + if m.IsMinimized() { + return t.WsMinimized + } else if m.IsMaximized() { + return t.WsMaximized + } else if m.IsFullscreen() { + return t.WsFullScreen + } + return t.WsNormal +} + func (m *ICefWindow) Maximize() { imports.Proc(internale_ICEFWindow_Maximize).Call(uintptr(m.instance)) } -- GitLab