close-for-minimize.go 2.6 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
//----------------------------------------
//
// Copyright © yanghy. All Rights Reserved.
//
// Licensed under Apache License Version 2.0, January 2004
//
// https://www.apache.org/licenses/LICENSE-2.0
//
//----------------------------------------

package main

import (
	"embed"
	"github.com/energye/energy/v2/cef"
	"github.com/energye/energy/v2/common"
	"github.com/energye/energy/v2/consts"
	"github.com/energye/golcl/lcl"
	"github.com/energye/golcl/lcl/types"
	"time"
)

//go:embed resources
var resources embed.FS

func main() {
	//全局初始化 每个应用都必须调用的
	cef.GlobalInit(nil, &resources)
	//创建应用
	cefApp := cef.NewApplication()
	//强制使用 VF 窗口
	//cefApp.SetExternalMessagePump(false)
	//cefApp.SetMultiThreadedMessageLoop(false)

	//指定一个URL地址,或本地html文件目录
	cef.BrowserWindow.Config.Url = "https://energy.yanghy.cn"
	if common.IsLinux() && cefApp.IsUIGtk3() {
		cef.BrowserWindow.Config.IconFS = "resources/icon.png"
	} else {
		cef.BrowserWindow.Config.IconFS = "resources/icon.ico"
	}
	//这个示例演示了两种窗口组件的使用, LCL和VF

	cef.BrowserWindow.SetBrowserInit(func(event *cef.BrowserEvent, window cef.IBrowserWindow) {
		if window.IsLCL() {
			//LCL 窗口是我们创建的,需要我们自己管理窗口
			bw := window.AsLCLBrowserWindow().BrowserWindow()
			bw.SetOnClose(func(sender lcl.IObject, action *types.TCloseAction) bool {
				*action = types.CaMinimize //隐藏窗口
				// 5秒后还原窗口
				go func() {
					println("LCL 最小化窗口, 5秒后还原.")
					time.Sleep(time.Second * 5)
					window.RunOnMainThread(func() {
						window.Restore() //还原窗口
					})
				}()
				return true //跳过默认事件, 如果想关闭窗口,这里返回false
			})
			bw.SetOnCloseQuery(func(sender lcl.IObject, canClose *bool) bool {
				return true //跳过默认事件, 如果想关闭窗口,这里返回false
			})
		} else if window.IsViewsFramework() {
			//VF 窗口是CEF自己创建的,这里我们只管Chromium的Close事件即可
			bw := window.AsViewsFrameworkBrowserWindow().BrowserWindow()
			bw.Chromium().SetOnClose(func(sender lcl.IObject, browser *cef.ICefBrowser, aAction *consts.TCefCloseBrowserAction) {
				*aAction = consts.CbaCancel //取消关闭 , 如果想关闭窗口,*aAction = consts.CbaClose
				window.Minimize()           //最小化窗口
				// 5秒后显示窗口
				go func() {
					println("VF 最小化窗口, 5秒后还原.")
					time.Sleep(time.Second * 5)
					window.RunOnMainThread(func() {
						window.Restore() //还原窗口
					})
				}()
			})
		}
	})
	//运行应用
	cef.Run(cefApp)
}