這篇文章具有很強的時效性,是在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已經可以協助很多控件定位的工作了!