用Go写Windows桌面应用 - 使用资源文件

这篇文章具有很强的时效性,是在2012年2月16日写的,这时Go1还没有发布,当前的Go编译器还无法嵌入资源文件。

上篇。我们做出了一个简单的窗体,但有两个重大缺陷:没有程序图标和没有应用系统主题。现在我们就来着手解决。

使用图标和系统主题,并将资源文件签入exe

创建一个资源文件(推荐使用ResEdit),在其中加入图标(用作程序图标)和一个manifest文件(用于启用系统主题),如下图所示。

image

现在代码目录里面应该拥有以下文件。

image

之后,就要用到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已经拥有程序图标了。

image

运行之后可以看到,系统主题也有了。

image

至此,已经能用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已经可以协助很多控件定位的工作了!Smile

posted @ 2012-02-16 13:58  AllenDang  阅读(3722)  评论(0编辑  收藏  举报