【Go语言写界面】一、使用xcgui完成go语言第一个软件界面

twgh · · 1675 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

## 一、先获取xcgui库 ```go go get github.com/twgh/xcgui ``` ## 二、到网盘下载xcgui.dll [百度云](https://pan.baidu.com/s/1rC3unQGaxnRUCMm8z8qzvA?pwd=1111) , [蓝奏云](https://wwi.lanzoup.com/b0cqd6nkb) 网盘里有64位的和32位的dll,一般选择64位的,go编译的程序默认也是64位的。 xcgui.dll需要和编译出来的程序放在一起,但每写一个程序都重复放的话就很麻烦了。 在开发时我建议把xcgui.dll放到`C:\Windows\System32`目录下,这样就不需要每次都把dll和程序放在一起了。 ## 三、开始写代码 刚开始你只需要知道3个包,程序包:`app`、窗口包:`window`、常量包:`xcc`。 ## 四、最简单的程序代码 ```go package main import ( "github.com/twgh/xcgui/app" "github.com/twgh/xcgui/window" "github.com/twgh/xcgui/xcc" ) func main() { // 炫彩_初始化, 参数填true是启用D2D硬件加速, 效果更好. 但xp系统不支持d2d, 这时候你就得填false来关闭d2d了 a := app.New(true) // 创建普通窗口, 宽300, 高200, 标题是"xcgui window", xcc.Window_Style_Default是使用默认窗口风格 w := window.New(0, 0, 300, 200, "xcgui window", 0, xcc.Window_Style_Default) // 显示窗口 w.Show(true) // 运行消息循环, 程序会被阻塞在这里不退出, 当炫彩窗口数量为0时退出 a.Run() // 退出界面库释放资源 a.Exit() } ``` ## 五、编译程序 ```go go build -ldflags="-s -w -H windowsgui" ``` 参数解释:`-H windowsgui`会隐藏黑窗口,`-s -w`去除了符号表和调试信息,这样可以减小软件体积。 ## 六、界面效果 直接编译后大小为1.61M,使用upx64位压缩后大小变为386K ![运行效果](https://img-blog.csdnimg.cn/2ac6f82e281f448f876d2d51b0c2b688.png#pic_center) ## 七、把dll编译进程序里,运行时写出 先把xcgui.dll放到项目目录里,然后看下面代码: ```go package main import ( _ "embed" "os" "github.com/twgh/xcgui/app" "github.com/twgh/xcgui/window" "github.com/twgh/xcgui/xcc" ) //go:embed XCGUI.dll var dll []byte func main() { os.WriteFile("xcgui.dll", dll, 0666) // 炫彩_初始化, 参数填true是启用D2D硬件加速, 效果更好. 但xp系统不支持d2d, 这时候你就得填false来关闭d2d了 a := app.New(true) // 创建普通窗口, 宽300, 高200, 标题是"xcgui window", xcc.Window_Style_Default是使用默认窗口风格 w := window.New(0, 0, 300, 200, "xcgui window", 0, xcc.Window_Style_Default) // 显示窗口 w.Show(true) // 运行消息循环, 程序会被阻塞在这里不退出, 当炫彩窗口数量为0时退出 a.Run() // 退出界面库释放资源 a.Exit() } ``` ## 八、如果不想让用户看到运行目录有个dll文件,可以把dll释放到系统临时目录里 这样用户就感觉不到dll的存在了,和一个二进制文件也没啥太大区别。 ```go package main import ( _ "embed" "github.com/twgh/xcgui/app" "github.com/twgh/xcgui/window" "github.com/twgh/xcgui/xc" "github.com/twgh/xcgui/xcc" ) //go:embed XCGUI.dll var dll []byte func main() { // 把 xcgui.dll 写出到windows临时目录 err := xc.WriteDll(dll) if err != nil { panic(err) } // 炫彩_初始化, 参数填true是启用D2D硬件加速, 效果更好. 但xp系统不支持d2d, 这时候你就得填false来关闭d2d了 a := app.New(true) // 创建普通窗口, 宽300, 高200, 标题是"xcgui window", xcc.Window_Style_Default是使用默认窗口风格 w := window.New(0, 0, 300, 200, "xcgui window", 0, xcc.Window_Style_Default) // 显示窗口 w.Show(true) // 运行消息循环, 程序会被阻塞在这里不退出, 当炫彩窗口数量为0时退出 a.Run() // 退出界面库释放资源 a.Exit() } ```

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

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

1675 次点击  ∙  1 赞  
加入收藏 微博
1 回复  |  直到 2022-08-30 17:52:32
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传