增加VF组件窗口边框和标题栏显示/隐藏配置

This commit is contained in:
杨红岩 2023-02-12 17:28:31 +08:00
parent c467ce6009
commit f0112dfec6
6 changed files with 106 additions and 89 deletions

View File

@ -24,9 +24,9 @@ import (
"time"
)
//LCLBrowserWindow 基于CEF lcl 窗口组件
// LCLBrowserWindow 基于CEF lcl 窗口组件
//
//该窗口使用CEF和LCL组件实现CEF<=1.106.xx版本 在windows、MacOSX可正常使用, Linux无法输入中文, CEF>=2.107.xx版本linux强制使用 ViewsFrameworkBrowserWindow 窗口组件
// 该窗口使用CEF和LCL组件实现CEF<=1.106.xx版本 在windows、MacOSX可正常使用, Linux无法输入中文, CEF>=2.107.xx版本linux强制使用 ViewsFrameworkBrowserWindow 窗口组件
type LCLBrowserWindow struct {
*lcl.TForm //
chromium IChromium //
@ -54,9 +54,9 @@ type LCLBrowserWindow struct {
cwcap *customWindowCaption //自定义窗口标题栏
}
//创建一个 LCL 带有 chromium 窗口
// 创建一个 LCL 带有 chromium 窗口
//
//该窗口默认不具备默认事件处理能力, 通过 EnableDefaultEvent 函数注册事件处理
// 该窗口默认不具备默认事件处理能力, 通过 EnableDefaultEvent 函数注册事件处理
func NewLCLBrowserWindow(config *tCefChromiumConfig, windowProperty WindowProperty, owner ...lcl.IComponent) *LCLBrowserWindow {
var window = NewLCLWindow(windowProperty, owner...)
window.ChromiumCreate(config, windowProperty.Url)
@ -69,7 +69,7 @@ func NewLCLBrowserWindow(config *tCefChromiumConfig, windowProperty WindowProper
return window
}
//创建一个LCL window窗口
// 创建一个LCL window窗口
func NewLCLWindow(windowProperty WindowProperty, owner ...lcl.IComponent) *LCLBrowserWindow {
var window = &LCLBrowserWindow{}
if len(owner) > 0 {
@ -91,7 +91,7 @@ func NewLCLWindow(windowProperty WindowProperty, owner ...lcl.IComponent) *LCLBr
return window
}
//设置属性
// 设置属性
func (m *LCLBrowserWindow) setProperty() {
m.SetTitle(m.windowProperty.Title)
if m.windowProperty.IconFS != "" {
@ -113,7 +113,7 @@ func (m *LCLBrowserWindow) setProperty() {
if m.windowProperty.AlwaysOnTop {
m.SetFormStyle(types.FsSystemStayOnTop)
}
if m.windowProperty._EnableHideCaption {
if m.windowProperty.EnableHideCaption {
m.HideTitle()
} else {
if !m.windowProperty.EnableMinimize {
@ -333,7 +333,7 @@ func (m *LCLBrowserWindow) SetVisible(value bool) {
m.TForm.SetVisible(value)
}
//以默认的方式展示在任务栏上
// 以默认的方式展示在任务栏上
func (m *LCLBrowserWindow) SetDefaultInTaskBar() {
if m.TForm == nil {
return
@ -341,7 +341,7 @@ func (m *LCLBrowserWindow) SetDefaultInTaskBar() {
m.TForm.SetShowInTaskBar(types.StDefault)
}
//展示在任务栏上
// 展示在任务栏上
func (m *LCLBrowserWindow) SetShowInTaskBar() {
if m.TForm == nil {
return
@ -349,7 +349,7 @@ func (m *LCLBrowserWindow) SetShowInTaskBar() {
m.TForm.SetShowInTaskBar(types.StAlways)
}
//不会展示在任务栏上
// 不会展示在任务栏上
func (m *LCLBrowserWindow) SetNotInTaskBar() {
if m.TForm == nil {
return
@ -357,16 +357,16 @@ func (m *LCLBrowserWindow) SetNotInTaskBar() {
m.TForm.SetShowInTaskBar(types.StNever)
}
//返回chromium的父组件对象该对象不是window组件对象,属于window的一个子组件
// 返回chromium的父组件对象该对象不是window组件对象,属于window的一个子组件
//
//在windows下它是 TCEFWindowParent, linux或macOSx下它是 TCEFLinkedWindowParent
// 在windows下它是 TCEFWindowParent, linux或macOSx下它是 TCEFLinkedWindowParent
//
//通过函数可调整该组件的属性
// 通过函数可调整该组件的属性
func (m *LCLBrowserWindow) WindowParent() ITCefWindowParent {
return m.windowParent
}
//返回窗口关闭状态
// 返回窗口关闭状态
func (m *LCLBrowserWindow) IsClosing() bool {
return m.isClosing
}
@ -428,7 +428,7 @@ func (m *LCLBrowserWindow) putChromiumWindowInfo() {
BrowserWindow.putWindowInfo(m.windowId, m)
}
//默认的chromium事件
// 默认的chromium事件
func (m *LCLBrowserWindow) defaultChromiumEvent() {
if m.WindowType() != consts.WT_DEV_TOOLS {
AddGoForm(m.windowId, m.Instance())
@ -449,7 +449,7 @@ func (m *LCLBrowserWindow) FormCreate() {
m.SetName(fmt.Sprintf("energy_window_name_%d", time.Now().UnixNano()/1e6))
}
//默认窗口活动/关闭处理事件
// 默认窗口活动/关闭处理事件
func (m *LCLBrowserWindow) defaultWindowEvent() {
if m.WindowType() != consts.WT_DEV_TOOLS {
m.TForm.SetOnActivate(m.activate)
@ -458,19 +458,19 @@ func (m *LCLBrowserWindow) defaultWindowEvent() {
m.TForm.SetOnShow(m.show)
}
//默认的窗口关闭事件
// 默认的窗口关闭事件
func (m *LCLBrowserWindow) defaultWindowCloseEvent() {
m.TForm.SetOnClose(m.close)
m.TForm.SetOnCloseQuery(m.closeQuery)
}
//启用默认关闭事件行为-该窗口将被关闭
// 启用默认关闭事件行为-该窗口将被关闭
func (m *LCLBrowserWindow) EnableDefaultCloseEvent() {
m.defaultWindowCloseEvent()
m.registerDefaultChromiumCloseEvent()
}
//启用所有默认事件行为
// 启用所有默认事件行为
func (m *LCLBrowserWindow) EnableAllDefaultEvent() {
m.defaultWindowCloseEvent()
m.defaultChromiumEvent()
@ -501,7 +501,7 @@ func (m *LCLBrowserWindow) SetOnCloseQuery(fn TCloseQueryEvent) {
m.onCloseQuery = fn
}
//每次激活窗口之后执行一次
// 每次激活窗口之后执行一次
func (m *LCLBrowserWindow) SetOnActivateAfter(fn lcl.TNotifyEvent) {
m.onActivateAfter = fn
}
@ -543,7 +543,7 @@ func (m *LCLBrowserWindow) CloseBrowserWindow() {
})
}
//禁用口透明
// 禁用口透明
func (m *LCLBrowserWindow) DisableTransparent() {
if m.TForm == nil {
return
@ -552,7 +552,7 @@ func (m *LCLBrowserWindow) DisableTransparent() {
m.SetAlphaBlendValue(255)
}
//使窗口透明 value 0 ~ 255
// 使窗口透明 value 0 ~ 255
func (m *LCLBrowserWindow) EnableTransparent(value uint8) {
if m.TForm == nil {
return
@ -561,7 +561,7 @@ func (m *LCLBrowserWindow) EnableTransparent(value uint8) {
m.SetAlphaBlendValue(value)
}
//禁用最小化按钮
// 禁用最小化按钮
func (m *LCLBrowserWindow) DisableMinimize() {
if m.TForm == nil {
return
@ -571,7 +571,7 @@ func (m *LCLBrowserWindow) DisableMinimize() {
m.EnabledMinimize(m.WindowProperty().EnableMinimize)
}
//禁用最大化按钮
// 禁用最大化按钮
func (m *LCLBrowserWindow) DisableMaximize() {
if m.TForm == nil {
return
@ -581,18 +581,18 @@ func (m *LCLBrowserWindow) DisableMaximize() {
m.EnabledMaximize(m.WindowProperty().EnableMaximize)
}
//禁用调整窗口大小
// 禁用调整窗口大小
func (m *LCLBrowserWindow) DisableResize() {
if m.TForm == nil {
return
}
m.WindowProperty().EnableResize = false
if !m.WindowProperty()._EnableHideCaption {
if !m.WindowProperty().EnableHideCaption {
m.TForm.SetBorderStyle(types.BsSingle)
}
}
//禁用系统菜单-同时禁用最小化,最大化,关闭按钮
// 禁用系统菜单-同时禁用最小化,最大化,关闭按钮
func (m *LCLBrowserWindow) DisableSystemMenu() {
if m.TForm == nil {
return
@ -601,7 +601,7 @@ func (m *LCLBrowserWindow) DisableSystemMenu() {
m.EnabledSystemMenu(false)
}
//禁用帮助菜单
// 禁用帮助菜单
func (m *LCLBrowserWindow) DisableHelp() {
if m.TForm == nil {
return
@ -609,7 +609,7 @@ func (m *LCLBrowserWindow) DisableHelp() {
m.SetBorderIcons(m.BorderIcons().Exclude(types.BiHelp))
}
//启用最小化按钮
// 启用最小化按钮
func (m *LCLBrowserWindow) EnableMinimize() {
if m.TForm == nil {
return
@ -619,7 +619,7 @@ func (m *LCLBrowserWindow) EnableMinimize() {
m.EnabledMinimize(m.WindowProperty().EnableMinimize)
}
//启用最大化按钮
// 启用最大化按钮
func (m *LCLBrowserWindow) EnableMaximize() {
if m.TForm == nil {
return
@ -629,18 +629,18 @@ func (m *LCLBrowserWindow) EnableMaximize() {
m.EnabledMaximize(m.WindowProperty().EnableMaximize)
}
//启用调整窗口大小
// 启用调整窗口大小
func (m *LCLBrowserWindow) EnableResize() {
if m.TForm == nil {
return
}
m.WindowProperty().EnableResize = true
if !m.WindowProperty()._EnableHideCaption {
if !m.WindowProperty().EnableHideCaption {
m.TForm.SetBorderStyle(types.BsSizeable)
}
}
//启用系统菜单-同时禁用最小化,最大化,关闭按钮
// 启用系统菜单-同时禁用最小化,最大化,关闭按钮
func (m *LCLBrowserWindow) EnableSystemMenu() {
if m.TForm == nil {
return
@ -649,7 +649,7 @@ func (m *LCLBrowserWindow) EnableSystemMenu() {
m.EnabledSystemMenu(true)
}
//启用帮助菜单
// 启用帮助菜单
func (m *LCLBrowserWindow) EnableHelp() {
if m.TForm == nil {
return
@ -920,7 +920,7 @@ func (m *LCLBrowserWindow) closeQuery(sender lcl.IObject, close *bool) {
}
}
//默认的chromium关闭事件
// 默认的chromium关闭事件
func (m *LCLBrowserWindow) registerDefaultChromiumCloseEvent() {
var bwEvent = BrowserWindow.browserEvent
m.chromium.SetOnClose(func(sender lcl.IObject, browser *ICefBrowser, aAction *TCefCloseBrowsesAction) {

View File

@ -19,7 +19,7 @@ import (
"github.com/energye/golcl/lcl/win"
)
//定义四角和边框范围
// 定义四角和边框范围
var (
angleRange int32 = 10 //四角
borderRange int32 = 5 //四边框
@ -35,9 +35,9 @@ type customWindowCaption struct {
rgn *HRGN //
}
//显示标题栏
// 显示标题栏
func (m *LCLBrowserWindow) ShowTitle() {
m.WindowProperty()._EnableHideCaption = false
m.WindowProperty().EnableHideCaption = false
//win.SetWindowLong(m.Handle(), win.GWL_STYLE, uintptr(win.GetWindowLong(m.Handle(), win.GWL_STYLE)|win.WS_CAPTION))
//win.SetWindowPos(m.Handle(), m.Handle(), 0, 0, 0, 0, win.SWP_NOSIZE|win.SWP_NOMOVE|win.SWP_NOZORDER|win.SWP_NOACTIVATE|win.SWP_FRAMECHANGED)
m.EnabledMaximize(m.WindowProperty().EnableMaximize)
@ -45,9 +45,9 @@ func (m *LCLBrowserWindow) ShowTitle() {
m.SetBorderStyle(types.BsSizeable)
}
//隐藏标题栏
// 隐藏标题栏
func (m *LCLBrowserWindow) HideTitle() {
m.WindowProperty()._EnableHideCaption = true
m.WindowProperty().EnableHideCaption = true
//win.SetWindowLong(m.Handle(), win.GWL_STYLE, uintptr(win.GetWindowLong(m.Handle(), win.GWL_STYLE)&^win.WS_CAPTION))
//win.SetWindowPos(m.Handle(), 0, 0, 0, m.Width(), m.Height()+500, win.SWP_NOMOVE|win.SWP_NOZORDER|win.SWP_NOACTIVATE|win.SWP_FRAMECHANGED|win.SWP_DRAWFRAME)
//无标题栏情况会导致任务栏不能切换窗口,不知道为什么要这样设置一下
@ -78,7 +78,7 @@ func (m *customWindowCaption) free() {
}
}
//NC 非客户区鼠标移动
// NC 非客户区鼠标移动
func (m *customWindowCaption) onNCMouseMove(message *types.TMessage, lResult *types.LRESULT, aHandled *bool) {
if m.canCaption { // 当前在标题栏
} else if m.canBorder { // 当前在边框
@ -87,7 +87,7 @@ func (m *customWindowCaption) onNCMouseMove(message *types.TMessage, lResult *ty
}
}
//设置鼠标图标
// 设置鼠标图标
func (m *customWindowCaption) onSetCursor(message *types.TMessage, lResult *types.LRESULT, aHandled *bool) {
if m.canBorder { //当前在边框
switch LOWORD(uint32(message.LParam)) {
@ -111,7 +111,7 @@ func (m *customWindowCaption) onSetCursor(message *types.TMessage, lResult *type
}
}
//鼠标是否在边框
// 鼠标是否在边框
func (m *customWindowCaption) onCanBorder(x, y int32, rect *types.TRect) (int, bool) {
if m.canBorder = x <= rect.Width() && x >= rect.Width()-angleRange && y <= angleRange; m.canBorder { // 右上
m.borderWMSZ = WMSZ_TOPRIGHT
@ -149,7 +149,7 @@ func (m *customWindowCaption) onCanBorder(x, y int32, rect *types.TRect) (int, b
return 0, false
}
//NC 鼠标左键按下
// NC 鼠标左键按下
func (m *customWindowCaption) onNCLButtonDown(hWND types.HWND, message *types.TMessage, lResult *types.LRESULT, aHandled *bool) {
if m.canCaption { // 标题栏
x, y := m.toPoint(message)
@ -169,14 +169,14 @@ func (m *customWindowCaption) onNCLButtonDown(hWND types.HWND, message *types.TM
}
}
//转换XY坐标
// 转换XY坐标
func (m *customWindowCaption) toPoint(message *types.TMessage) (x, y int32) {
return GET_X_LPARAM(message.LParam), GET_Y_LPARAM(message.LParam)
}
//鼠标是否在标题栏区域
// 鼠标是否在标题栏区域
//
//如果启用了css拖拽则校验拖拽区域,否则只返回相对于浏览器窗口的x,y坐标
// 如果启用了css拖拽则校验拖拽区域,否则只返回相对于浏览器窗口的x,y坐标
func (m *customWindowCaption) isCaption(hWND types.HWND, message *types.TMessage) (int32, int32, bool) {
dx, dy := m.toPoint(message)
p := &types.TPoint{
@ -231,7 +231,7 @@ func (m *LCLBrowserWindow) doOnRenderCompMsg(message *types.TMessage, lResult *t
if caption { //窗口标题栏
*lResult = HTCAPTION
*aHandled = true
} else if m.WindowProperty()._EnableHideCaption && m.WindowProperty().EnableResize && m.WindowState() == types.WsNormal { //1.窗口隐藏标题栏 2.启用了调整窗口大小 3.非最大化、最小化、全屏状态
} else if m.WindowProperty().EnableHideCaption && m.WindowProperty().EnableResize && m.WindowState() == types.WsNormal { //1.窗口隐藏标题栏 2.启用了调整窗口大小 3.非最大化、最小化、全屏状态
rect := m.BoundsRect()
if result, handled := m.cwcap.onCanBorder(x, y, &rect); handled {
*lResult = types.LRESULT(result)
@ -241,7 +241,7 @@ func (m *LCLBrowserWindow) doOnRenderCompMsg(message *types.TMessage, lResult *t
}
}
//每一次拖拽区域改变都需要重新设置
// 每一次拖拽区域改变都需要重新设置
func (m *LCLBrowserWindow) setDraggableRegions() {
//在主线程中运行
QueueAsyncCall(func(id int) {
@ -278,7 +278,7 @@ func (m *LCLBrowserWindow) registerWindowsCompMsgEvent() {
})
if m.WindowProperty().EnableWebkitAppRegion && m.WindowProperty().EnableWebkitAppRegionDClk {
m.windowResize = func(sender lcl.IObject) bool {
if m.WindowState() == types.WsMaximized && (m.WindowProperty()._EnableHideCaption || m.BorderStyle() == types.BsNone || m.BorderStyle() == types.BsSingle) {
if m.WindowState() == types.WsMaximized && (m.WindowProperty().EnableHideCaption || m.BorderStyle() == types.BsNone || m.BorderStyle() == types.BsSingle) {
var monitor = m.Monitor().WorkareaRect()
m.SetBounds(monitor.Left, monitor.Top, monitor.Right-monitor.Left, monitor.Bottom-monitor.Top)
m.SetWindowState(types.WsMaximized)
@ -296,7 +296,7 @@ func (m *LCLBrowserWindow) registerWindowsCompMsgEvent() {
//}
}
//for windows maximize and restore
// for windows maximize and restore
func (m *LCLBrowserWindow) Maximize() {
if m.TForm == nil {
return

View File

@ -20,11 +20,11 @@ import (
"github.com/energye/golcl/lcl/types"
)
//ViewsFrameworkBrowserWindow 基于CEF views framework 窗口组件
// ViewsFrameworkBrowserWindow 基于CEF views framework 窗口组件
//
//该窗口使用CEF内部实现在linux下107.xx以后版本默认使用GTK3但无法使用lcl组件集成到窗口中
// 该窗口使用CEF内部实现在linux下107.xx以后版本默认使用GTK3但无法使用lcl组件集成到窗口中
//
//当创建应用配置时 MultiThreadedMessageLoop 和 ExternalMessagePump 属性同时为false(linux系统默认强制false)时启用ViewsFramework窗口
// 当创建应用配置时 MultiThreadedMessageLoop 和 ExternalMessagePump 属性同时为false(linux系统默认强制false)时启用ViewsFramework窗口
type ViewsFrameworkBrowserWindow struct {
isClosing bool //
windowType consts.WINDOW_TYPE //0:browser 1:devTools 2:viewSource 默认:0
@ -43,7 +43,7 @@ type ViewsFrameworkBrowserWindow struct {
regions *TCefDraggableRegions //窗口内html拖拽区域
}
//创建 ViewsFrameworkBrowserWindow 窗口
// 创建 ViewsFrameworkBrowserWindow 窗口
func NewViewsFrameworkBrowserWindow(chromiumConfig *tCefChromiumConfig, windowProperty WindowProperty, owner ...lcl.IComponent) *ViewsFrameworkBrowserWindow {
if chromiumConfig == nil {
chromiumConfig = NewChromiumConfig()
@ -96,7 +96,7 @@ func NewViewsFrameworkBrowserWindow(chromiumConfig *tCefChromiumConfig, windowPr
return m
}
//ViewsFrameworkBrowserWindow 主窗口初始化
// ViewsFrameworkBrowserWindow 主窗口初始化
func (m *browser) appContextInitialized(app *TCEFApplication) {
if !common.Args.IsMain() {
return
@ -160,7 +160,7 @@ func (m *ViewsFrameworkBrowserWindow) registerPopupEvent() {
})
}
//重置窗口属性-通过事件函数
// 重置窗口属性-通过事件函数
func (m *ViewsFrameworkBrowserWindow) ResetWindowPropertyForEvent() {
wp := m.WindowProperty()
m.windowComponent.SetOnGetInitialBounds(func(sender lcl.IObject, window *ICefWindow, aResult *TCefRect) {
@ -190,6 +190,9 @@ func (m *ViewsFrameworkBrowserWindow) ResetWindowPropertyForEvent() {
m.windowComponent.SetOnCanClose(func(sender lcl.IObject, window *ICefWindow, aResult *bool) {
*aResult = wp.EnableClose
})
m.windowComponent.SetOnIsFrameless(func(sender lcl.IObject, window *ICefWindow, aResult *bool) {
*aResult = wp.EnableHideCaption
})
m.windowComponent.SetAlwaysOnTop(wp.AlwaysOnTop)
m.windowComponent.SetBounds(NewCefRect(wp.X, wp.Y, wp.Width, wp.Height))
}
@ -313,7 +316,7 @@ func (m *ViewsFrameworkBrowserWindow) registerDefaultEvent() {
}
}
//启用所有默认事件行为
// 启用所有默认事件行为
func (m *ViewsFrameworkBrowserWindow) EnableAllDefaultEvent() {
m.registerPopupEvent()
m.registerDefaultEvent()
@ -493,7 +496,7 @@ func (m *ViewsFrameworkBrowserWindow) SetCenterWindow(value bool) {
m.WindowProperty().EnableCenterWindow = value
}
//返回窗口关闭状态
// 返回窗口关闭状态
func (m *ViewsFrameworkBrowserWindow) IsClosing() bool {
return m.isClosing
}
@ -508,32 +511,32 @@ func (m *ViewsFrameworkBrowserWindow) SetWindowType(windowType consts.WINDOW_TYP
m.windowType = windowType
}
//禁用最小化按钮
// 禁用最小化按钮
func (m *ViewsFrameworkBrowserWindow) DisableMinimize() {
m.WindowProperty().EnableMinimize = false
}
//禁用最大化按钮
// 禁用最大化按钮
func (m *ViewsFrameworkBrowserWindow) DisableMaximize() {
m.WindowProperty().EnableMaximize = false
}
//禁用调整窗口大小
// 禁用调整窗口大小
func (m *ViewsFrameworkBrowserWindow) DisableResize() {
m.WindowProperty().EnableResize = false
}
//启用最小化按钮
// 启用最小化按钮
func (m *ViewsFrameworkBrowserWindow) EnableMinimize() {
m.WindowProperty().EnableMinimize = true
}
//启用最大化按钮
// 启用最大化按钮
func (m *ViewsFrameworkBrowserWindow) EnableMaximize() {
m.WindowProperty().EnableMaximize = true
}
//启用调整窗口大小
// 启用调整窗口大小
func (m *ViewsFrameworkBrowserWindow) EnableResize() {
m.WindowProperty().EnableResize = true
}

View File

@ -12,13 +12,20 @@
// 非windows的未实现
package cef
//显示标题栏
// 显示标题栏
func (m *ViewsFrameworkBrowserWindow) ShowTitle() {
m.WindowProperty().EnableHideCaption = false
m.WindowComponent().SetOnIsFrameless(func(sender lcl.IObject, window *ICefWindow, aResult *bool) {
*aResult = false
})
}
//隐藏标题栏
// 隐藏标题栏
func (m *ViewsFrameworkBrowserWindow) HideTitle() {
m.WindowProperty().EnableHideCaption = true
m.WindowComponent().SetOnIsFrameless(func(sender lcl.IObject, window *ICefWindow, aResult *bool) {
*aResult = true
})
}
func (m *ViewsFrameworkBrowserWindow) SetDefaultInTaskBar() {

View File

@ -12,23 +12,30 @@
package cef
import (
"github.com/energye/golcl/lcl"
"github.com/energye/golcl/lcl/win"
)
//显示标题栏
// 显示标题栏
func (m *ViewsFrameworkBrowserWindow) ShowTitle() {
m.WindowProperty()._EnableHideCaption = false
handle := m.WindowComponent().WindowHandle()
win.SetWindowLong(handle.ToPtr(), win.GWL_STYLE, uintptr(win.GetWindowLong(handle.ToPtr(), win.GWL_STYLE)|win.WS_CAPTION))
win.SetWindowPos(handle.ToPtr(), 0, 0, 0, 0, 0, win.SWP_NOSIZE|win.SWP_NOMOVE|win.SWP_NOZORDER|win.SWP_NOACTIVATE|win.SWP_FRAMECHANGED)
m.WindowProperty().EnableHideCaption = false
//handle := m.WindowComponent().WindowHandle()
//win.SetWindowLong(handle.ToPtr(), win.GWL_STYLE, uintptr(win.GetWindowLong(handle.ToPtr(), win.GWL_STYLE)|win.WS_CAPTION))
//win.SetWindowPos(handle.ToPtr(), 0, 0, 0, 0, 0, win.SWP_NOSIZE|win.SWP_NOMOVE|win.SWP_NOZORDER|win.SWP_NOACTIVATE|win.SWP_FRAMECHANGED)
m.WindowComponent().SetOnIsFrameless(func(sender lcl.IObject, window *ICefWindow, aResult *bool) {
*aResult = false
})
}
//隐藏标题栏
// 隐藏标题栏
func (m *ViewsFrameworkBrowserWindow) HideTitle() {
m.WindowProperty()._EnableHideCaption = true
handle := m.WindowComponent().WindowHandle()
win.SetWindowLong(handle.ToPtr(), win.GWL_STYLE, uintptr(win.GetWindowLong(handle.ToPtr(), win.GWL_STYLE)&^win.WS_CAPTION))
win.SetWindowPos(handle.ToPtr(), 0, 0, 0, 0, 0, win.SWP_NOSIZE|win.SWP_NOMOVE|win.SWP_NOZORDER|win.SWP_NOACTIVATE|win.SWP_FRAMECHANGED)
m.WindowProperty().EnableHideCaption = true
//handle := m.WindowComponent().WindowHandle()
//win.SetWindowLong(handle.ToPtr(), win.GWL_STYLE, uintptr(win.GetWindowLong(handle.ToPtr(), win.GWL_STYLE)&^win.WS_CAPTION))
//win.SetWindowPos(handle.ToPtr(), 0, 0, 0, 0, 0, win.SWP_NOSIZE|win.SWP_NOMOVE|win.SWP_NOZORDER|win.SWP_NOACTIVATE|win.SWP_FRAMECHANGED)
m.WindowComponent().SetOnIsFrameless(func(sender lcl.IObject, window *ICefWindow, aResult *bool) {
*aResult = true
})
}
func (m *ViewsFrameworkBrowserWindow) SetDefaultInTaskBar() {

View File

@ -14,7 +14,7 @@ import (
"github.com/energye/golcl/lcl/types"
)
//辅助工具
// 辅助工具
type auxTools struct {
devToolsWindow IBrowserWindow //devTools
devToolsX int32 //上次改变的窗体位置,宽度
@ -29,9 +29,9 @@ type auxTools struct {
viewSourceHeight int32 //
}
//窗口属性配置器
// 窗口属性配置器
//
//部分属性配置并不支持所有平台
// 部分属性配置并不支持所有平台
type WindowProperty struct {
IsShowModel bool //是否以模态窗口显示
WindowState types.TWindowState //窗口 状态
@ -40,7 +40,7 @@ type WindowProperty struct {
Url string //默认打开URL
Icon string //窗口图标 加载本地图标 local > /app/resources/icon.ico, linux使用png
IconFS string //窗口图标 加载emfs内置图标 emfs > resources/icon.ico, linux使用png
_EnableHideCaption bool //窗口 是否隐藏标题栏
EnableHideCaption bool //窗口 是否隐藏标题栏, VF窗口组件Linux下不能动态控制
EnableMinimize bool //窗口 是否启用最小化 default: true
EnableMaximize bool //窗口 是否启用最大化 default: true
EnableResize bool //窗口 是否允许调整大小 default: true
@ -56,9 +56,9 @@ type WindowProperty struct {
Height int32 //窗口 高 default: 768
}
//浏览器窗口基础接口
// 浏览器窗口基础接口
//
//定义了常用函数
// 定义了常用函数
type IBrowserWindow interface {
Id() int32 //窗口ID
Handle() types.HWND //窗口句柄
@ -107,9 +107,9 @@ type IBrowserWindow interface {
NewSysTray() ITray //systray系统原生
}
//浏览器 LCLBrowserWindow 窗口接口 继承 IBrowserWindow
// 浏览器 LCLBrowserWindow 窗口接口 继承 IBrowserWindow
//
//定义了LCL常用函数
// 定义了LCL常用函数
type ILCLBrowserWindow interface {
IBrowserWindow
BrowserWindow() *LCLBrowserWindow //返回 LCLBrowserWindow 窗口结构
@ -124,9 +124,9 @@ type ILCLBrowserWindow interface {
NewTray() ITray //创建LCL的系统托盘
}
//浏览器 ViewsFrameworkBrowserWindow 窗口接口 继承 IBrowserWindow
// 浏览器 ViewsFrameworkBrowserWindow 窗口接口 继承 IBrowserWindow
//
//定义了ViewsFramework常用函数
// 定义了ViewsFramework常用函数
type IViewsFrameworkBrowserWindow interface {
IBrowserWindow
BrowserWindow() *ViewsFrameworkBrowserWindow //返回 ViewsFrameworkBrowserWindow 窗口结构
@ -139,7 +139,7 @@ type IViewsFrameworkBrowserWindow interface {
SetOnGetInitialBounds(onGetInitialBounds WindowComponentOnGetInitialBounds) //设置窗口初始bounds
}
//创建一个属性配置器,带有窗口默认属性值
// 创建一个属性配置器,带有窗口默认属性值
func NewWindowProperty() WindowProperty {
return WindowProperty{
Title: "Energy",