用Go寫Windows桌面應用 使用資源檔案

2022-05-18 05:13:16 字數 1470 閱讀 3891

這篇文章具有很強的時效性,是在2023年2月16日寫的,這時go1還沒有發布,當前的go編譯器還無法嵌入資源檔案。

接上篇。我們做出了乙個簡單的窗體,但有兩個重大缺陷:沒有程式圖示和沒有應用系統主題。現在我們就來著手解決。

建立乙個資源檔案(推薦使用resedit),在其中加入圖示(用作程式圖示)和乙個manifest檔案(用於啟用系統主題),如下圖所示。

現在**目錄裡面應該擁有以下檔案。

之後,就要用到windres這個工具了,它的作用是把乙個資源檔案(*.rc)編譯成*.o,之後就可以使用go的pack工具把*.o一起包裝到exe檔案裡。命令列如下。

windres resource.rc -o temp-rc.o

執行之後可以看到,系統主題也有了。

至此,已經能用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(

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(

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已經可以協助很多控制項定位的工作了!

windows下用go語言寫程式

linux下,google的go語言安裝起來很方便,用起來也很爽,幾行 就可以實現很強大的功能。現在的問題是我想在windows下玩 其實windows下也不麻煩,具體見下文。二 寫go 檔案 test.go 如下 package main import fmt func main test 四 批...

Go語言開發Windows應用

go語言開發windows應用 當第一次看到go程式在windows平台生成可執行的exe檔案,就宣告了windows應用也一定是go語言的戰場。go不是指令碼語言,但卻有著指令碼語言的輕便簡單的特性。相較於php和python之類以伺服器控制台為主要戰場的指令碼語言來說,go語言是真正的圓了 動態...

Go語言開發Windows應用

當第一次看到go程式在windows平台生成可執行的exe檔案,就宣告了windows應用也一定是go語言的戰場。go不是指令碼語言,但卻有著指令碼語言的輕便簡單的特性。相較於php和python之類以伺服器控制台為主要戰場的指令碼語言來說,go語言是真正的圓了 動態語言的應用開發夢 這個專案已經實...