用Go写Windows桌面应用 - 使用资源文件
这篇文章具有很强的时效性,是在2012年2月16日写的,这时Go1还没有发布,当前的Go编译器还无法嵌入资源文件。
接上篇。我们做出了一个简单的窗体,但有两个重大缺陷:没有程序图标和没有应用系统主题。现在我们就来着手解决。
使用图标和系统主题,并将资源文件签入exe
创建一个资源文件(推荐使用ResEdit),在其中加入图标(用作程序图标)和一个manifest文件(用于启用系统主题),如下图所示。
现在代码目录里面应该拥有以下文件。
之后,就要用到windres这个工具了,它的作用是把一个资源文件(*.rc)编译成*.o,之后就可以使用Go的pack工具把*.o一起包装到exe文件里。命令行如下。
windres resource.rc -o temp-rc.o
go tool 8g app.go
go tool pack grc _go_.8 app.8 temp-rc.o
go tool 8l –s –Hwindowsgui –o app.exe _go_.8
现在可以看到我们的app.exe已经拥有程序图标了。
运行之后可以看到,系统主题也有了。
至此,已经能用Go开发一些小工具了。另外,gform还提供了从资源文件中读取ico、png、jpg的接口,为自绘控件提供了便利。
资源文件的其他相关函数
读取图片资源
gform.NewBitmapFromResource(instance w32.HINSTANCE, resName *uint16, resType *uint16, background Color) (*Bitmap, error)
用法
//此处对应资源文件中的ID
IDR_DROPARROW = 108
bmp, err := gform.NewBitmapFromResource(
gform.GetAppInstance(), //应用程序实例
syscall.StringToUTF16Ptr("PNG"), //资源文件中的资源类型
w32.MakeIntResource(IDR_DROPARROW), //资源ID
gform.RGB(139, 190, 37)) //透明填充色
读取图标资源
gform.NewIconFromResource(instance w32.HINSTANCE, resId uint16) (*Icon, error)
用法
IDI_ICON1 = 101
ico, err := gform.NewIconFromResource(
gform.GetAppInstance(), //应用程序实例
w32.MakeIntResource(IDI_ICON1)) //图标资源ID
读取对话框资源
gform.NewDialogFromResId(parent Controller, resId uint) *Dialog
用法
IDD_MAIN = 103
mainform = gform.NewDialogFromResId(nil, IDD_MAIN)
mainform.Center()
mainform.Show()
这个就有意思了,在没有完整的窗体设计器出现之前,ResEdit已经可以协助很多控件定位的工作了!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义