在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
几个月以前看到了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 ( func main() { mainform := gform.NewForm(nil) 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 ( 然后添加按钮 btnOk := gform.NewPushButton(mainform) 添加事件处理函数 func btnOK_OnLBUp(arg *gform.EventArg) { 搞定!修改后的完整代码如下 package main import ( func btnOK_OnLBUp(arg *gform.EventArg) { func main() { mainform := gform.NewForm(nil) btnOk := gform.NewPushButton(mainform) mainform.Show() gform.RunMainLoop() 运行,怎么样? 够简单吗?恩,我承认,不简单,纯编码的方式创建UI很折磨人,特别是控件定位。别着急,gform还支持另外一种方式创建UI,使用资源文件,其实熟悉win32 gui体系的朋友应该很熟悉这种方式。
另外,大家也可能注意到按钮的样式不正常,并没有应用windows系统的控件样式,这在下一篇里面会提到解决方法。 |
请发表评论