分享
  1. 首页
  2. 文章

用Go写Windows桌面应用 - 使用Form

AllenDang · · 21595 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

几个月以前看到了Go的消息,读完入门PPT之后,便有种感觉,这就是我想象中的语言。语法简单,写起来手感极好,设计则处处透着简洁。

随后便开始用它代替python写一些常用小工具,堪称得心应手。几个月以后,日益离不开了,再用别的语言时总觉得缺了点什么。

我很喜欢写桌面应用,之前一直用C++,但实在不喜欢它那复杂的设计,而且也没有找到合心意的UI库。此时心里冒出了一个念头,用Go写一套UI库。很大胆,很冒险,甚至很二。很多人都提醒到,UI库这种庞大的东西靠一个人是不可能完成的。我也经常在挣扎,但还是没忍住这股冲动,我动手了!

从零开始封装win32 api,工作量挺大的,但好在已经有很多前辈已经在C++里面做过同样的事情了,所以倒也还顺利。

好了,话不多说,就先看看代码吧!是骡子是马拉出来溜溜。

第一步,先安装gform,也就是我封装的UI库。确认用的是最新的Weekly版本的Go,然后打开命令行运行下面两行。

go get github.com/AllenDang/gform

go install github.com/AllenDang/gform

搞定,因为go命令会自动检测库依赖,所以也会顺带把w32,我封装的win32 api库,安装好。

好了,现在可以创建一个空窗体。

package main

import (
"github.com/AllenDang/gform"
)

func main() {
gform.Init()

mainform := gform.NewForm(nil)
mainform.SetSize(300, 200)
mainform.Center()
mainform.Show()

gform.RunMainLoop()
}

用下面命令行编译

go tool 8g app.go

go tool 8l –s –Hwindowsgui –o app.exe app.8

运行app.exe,窗体出来了,应用程序体积706kb,没有任何依赖的dll,用upx压缩后219kb,很好,我满意了。

现在来添加一个按钮吧,点击它之后能弹出一个"Hello world"的消息框。

先添加对"w32"这个包的应用

import (
"github.com/AllenDang/gform"
"github.com/AllenDang/w32"
)

然后添加按钮

btnOk := gform.NewPushButton(mainform)
btnOk.SetCaption("点我")
btnOk.SetPos(100, 10)
btnOk.OnLBUp().Attach(btnOK_OnLBUp)

添加事件处理函数

func btnOK_OnLBUp(arg *gform.EventArg) {
gform.MsgBox(arg.Sender(), "消息", "Hello world", w32.MB_OK|w32.MB_ICONINFORMATION)
}

搞定!修改后的完整代码如下

package main

import (
"github.com/AllenDang/gform"
"github.com/AllenDang/w32"
)

func btnOK_OnLBUp(arg *gform.EventArg) {
gform.MsgBox(arg.Sender(), "消息", "Hello world", w32.MB_OK|w32.MB_ICONINFORMATION)
}

func main() {
gform.Init()

mainform := gform.NewForm(nil)
mainform.SetSize(300, 200)
mainform.Center()

btnOk := gform.NewPushButton(mainform)
btnOk.SetCaption("点我")
btnOk.SetPos(100, 10)
btnOk.OnLBUp().Attach(btnOK_OnLBUp)

mainform.Show()

gform.RunMainLoop()
}

运行,怎么样?

image

够简单吗?恩,我承认,不简单,纯编码的方式创建UI很折磨人,特别是控件定位。别着急,gform还支持另外一种方式创建UI,使用资源文件,其实熟悉win32 gui体系的朋友应该很熟悉这种方式。

另外,大家也可能注意到按钮的样式不正常,并没有应用windows系统的控件样式,这在下一篇里面会提到解决方法。


有疑问加站长微信联系(非本文作者)

本文来自:博客园

感谢作者:AllenDang

查看原文:用Go写Windows桌面应用 - 使用Form

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
21595 次点击 ∙ 2 赞
1 回复 | 直到 2000年01月01日 00:00:00
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏