修改源码
如图,经过慢慢查找,最终在这个位置设置了窗口的窗口属性。也就是我们在app.go中设置的表单属性会被设置为这里的表单。第71行我添加了一行代码(我的想法可以暂时编辑源码)
exStyle=w32.WS_EX_NOREDIRECTIONBITMAP|w32.WS_EX_TOOLWINDOW|w32.WS_EX_TOPMOST 上面代码的功能是创建一个顶部有工具栏的混合渲染窗口。 WS_EX_TOOLWINDOW 属性是关键。窗口的图标不显示在任务栏上。直接百度WS_EX_TOOLWINDOW就是关键。可以出现带有详细描述的文字。另外,这里还可以扩展Windows Forms的各种功能。
给个边框加点样式
比较好看的样式是百度的各种特效,比如旋转,灯光等等。Wailes的UI完全是一个可以自由使用的网页。现在我们已经实现了大部分,隐藏任务栏图标,现在我们需要向系统托盘添加一个图标。
系统托盘图标实现
首先找一张png图片,我们要用到浮球的图片
是的,你会发现这张图就是wails的图标图。现在需要更改桌面上图片的名称,并将其替换为这张图片。
然后删除windows下的build----》icon.ico
然后启动wails,运行wails dev,然后build----》windows下的icon.ico就会重新生成,就是我们替换的图片了。 ico格式是图标图片,系统托盘图标必须使用这种格式。下一步是将图标放入系统托盘中。这里我们使用github.com/getlantern/systray包来完成。详细教程可以在百度上找到。
完整的appgo代码
包mainimport ('嵌入''github.com/wailsapp/wails/v2''github.com/wailsapp/wails/v2/pkg/options/windows''github.com/wailsapp/wails/v2/pkg/options'' github.com/wailsapp/wails/v2/pkg/options/assetserver')//go:embed all:frontend/distvar assets embed.FSfunc main() {//创建应用程序结构的实例app :=NewApp()//创建应用程序optionserr :=wails.Run(options.App{Title: 'test',Width: 130,Height: 130,AssetServer: assetserver.Options{Assets: 资产,},BackgroundColour: options.RGBA{R: 0, G: 0, B3336 0 0, A: 0} , OnStartup: app.startup,OnDomReady: app.OnDomReady,Bind: []interface{}{app,},AlwaysOnTop: true, //顶层Frameless: true, //无边框Windows: windows.Options{WebviewIsTransparent: true, //网页透明WindowIsTranslucent: true, //窗口透明DisableFramelessWindowDecorations: true,},})if err !=nil {println('Error:', err.Error())}}完成app.go
package mainimport ('context''fmt''github.com/getlantern/systray''github.com/wailsapp/wails/v2/pkg/runtime''io/ioutil')//App structtype App struct {ctx context.Context }//NewApp 创建一个新的App应用structfunc NewApp() *App {return App{}}//app启动时调用startup。上下文已保存//因此我们可以调用运行时方法func (a *App)startup (ctx context.Context) {a.ctx=ctxgo systray.Run(onReady, onExit)}//Greet 返回给定名称的问候语func (a *App) Greet(name string) string {return fmt.Sprintf('你好%s,演出时间到了!', name)}var mShow, mHide, mQuit *systray.MenuItemfunc onReady() {b, err :=ioutil.ReadFile('D://icon.ico') //这里我生成的图标放在D盘if err !=nil {fmt.Print(err)}systray.SetIcon(b)systray.SetTooltip('右下角服务已最小化,右键打开菜单!')mShow=systray.AddMenuItem('显示','显示窗口')mHide=systray.AddMenuItem('隐藏','隐藏窗口') )systray.AddSeparator()mQuit=systray.AddMenuItem('退出', '退出程序')fmt.Println('End~~~~1~~')}func onExit() {//清理这里fmt.Println( '77777-5555-5555')}func (a *App) OnDomReady(ctx context.Context) {fmt.Println (334)var c=ctxfmt.Println(456)go func() {for {fmt.Println(' --1----1----')select {case -mShow.ClickedCh:fmt.Println('显示')runtime.Show(c)runtime.WindowUnminimise(c)runtime.WindowSetAlwaysOnTop(c, true)case - mHide.ClickedCh:fmt.Println('隐藏')runtime.Hide(c)case -mQuit.ClickedCh:fmt.Println('退出')runtime.Quit(c)}}}()}后记
用户评论
这个标题好想说的是讲如何实现微信朋友圈那样的界面吧?
有18位网友表示赞同!
Wails真是牛!可以跨平台应用,开发360悬浮球应该很方便!
有17位网友表示赞同!
学习Go和Wails,做一套自己的桌面工具很有想法!
有11位网友表示赞同!
看标题,感觉要分享一些实际的代码实现细节了?
有9位网友表示赞同!
之前一直没尝试过Wails开发桌面应用,这次一定要看看。
有11位网友表示赞同!
360悬浮球的功能也太牛了吧?希望能看到文章里的一些实现方法。
有8位网友表示赞同!
我最近也打算学习Golang,刚好用到这套框架!
有20位网友表示赞同!
盼望作者能分享详细的开发教程,很期待!
有12位网友表示赞同!
桌面应用和 web 应用差别很大啊,需要掌握不同的技术的.
有20位网友表示赞同!
想看看到这种悬浮球的实际效果画面!
有19位网友表示赞同!
Go语言的并发处理能力真是太强了,应用在桌面程序开发上更牛逼!
有14位网友表示赞同!
Wails 和 Electron 都是不错的跨平台框架工具。
有10位网友表示赞同!
用Golang 开发桌面应用,感觉性能会有优势吧?
有17位网友表示赞同!
文章要分享哪些 Wails 的 API 来实现悬浮球功能呢?
有9位网友表示赞同!
360悬浮球真好用,希望能学习下它的设计和开发思路。
有18位网友表示赞同!
看看这个框架能不能替代 Electron ,效率高不高的?
有8位网友表示赞同!
桌面应用越来越流行了,这门技术很有潜力!
有7位网友表示赞同!
Go语言已经非常成熟了,各种框架也支持越来越完善!
有5位网友表示赞同!