用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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM