用Go寫Windows案頭應用 – 使用Form

來源:互聯網
上載者:User

幾個月以前看到了Go的訊息,讀完入門PPT之後,便有種感覺,這就是我想象中的語言。文法簡單,寫起來手感極好,設計則處處透著簡潔。

隨後便開始用它代替python寫一些常用小工具,堪稱得心應手。幾個月以後,日益離不開了,再用別的語言時總覺得缺了點什麼。

我很喜歡寫案頭應用,之前一直用C++,但實在不喜歡它那複雜的設計,而且也沒有找到合心意的UI庫。此時心裡冒出了一個念頭,用Go寫一套UI庫。很大膽,很冒險,甚至很二。很多人都提醒到,UI庫這種龐大的東西靠一個人是不可能完成的。我也經常在掙紮,但還是沒忍住這股衝動,我動手了!

從零開始封裝win32 api,工作量挺大的,但好在已經有很多前輩已經在C++裡面做過同樣的事情了,所以倒也還順利。

好了,話不多說,就先看看代碼吧!是騾子是馬拉出來溜溜。

第一步,先安裝gform,也就是我封裝的UI庫。確認用的是最新的Weekly版本的Go,然後開啟命令列運行下面兩行。

go get github.com/AllenDang/gform

go install github.com/AllenDang/gform

搞定,因為go命令會自動檢測庫依賴,所以也會順帶把w32,我封裝的win32 api庫,安裝好。

好了,現在可以建立一個空表單。

package main

import (
    "github.com/AllenDang/gform"
)

func main() {
    gform.Init()

    mainform := gform.NewForm(nil)
    mainform.SetSize(300, 200)
    mainform.Center()
    mainform.Show()

    gform.RunMainLoop()
}

用下面命令列編譯

go tool 8g app.go

go tool 8l –s –Hwindowsgui –o app.exe app.8

運行app.exe,表單出來了,應用程式體積706kb,沒有任何依賴的dll,用upx壓縮後219kb,很好,我滿意了。

現在來添加一個按鈕吧,點擊它之後能彈出一個“Hello world”的訊息框。

先添加對"w32”這個包的應用

import (
    "github.com/AllenDang/gform"
    "github.com/AllenDang/w32"
)

然後添加按鈕

btnOk := gform.NewPushButton(mainform)
btnOk.SetCaption("點我")
btnOk.SetPos(100, 10)
btnOk.OnLBUp().Attach(btnOK_OnLBUp)

添加事件處理函數

func btnOK_OnLBUp(arg *gform.EventArg) {
    gform.MsgBox(arg.Sender(), "訊息", "Hello world", w32.MB_OK|w32.MB_ICONINFORMATION)
}

搞定!修改後的完整代碼如下

package main

import (
    "github.com/AllenDang/gform"
    "github.com/AllenDang/w32"
)

func btnOK_OnLBUp(arg *gform.EventArg) {
    gform.MsgBox(arg.Sender(), "訊息", "Hello world", w32.MB_OK|w32.MB_ICONINFORMATION)
}

func main() {
    gform.Init()

    mainform := gform.NewForm(nil)
    mainform.SetSize(300, 200)
    mainform.Center()

    btnOk := gform.NewPushButton(mainform)
    btnOk.SetCaption("點我")
    btnOk.SetPos(100, 10)
    btnOk.OnLBUp().Attach(btnOK_OnLBUp)

    mainform.Show()

    gform.RunMainLoop()
}

運行,怎麼樣?

夠簡單嗎?恩,我承認,不簡單,純編碼的方式建立UI很折磨人,特別是控制項定位。別著急,gform還支援另外一種方式建立UI,使用資源檔,其實熟悉win32 gui體系的朋友應該很熟悉這種方式。

另外,大家也可能注意到按鈕的樣式不正常,並沒有應用windows系統的控制項樣式,這在下一篇裡面會提到解決方案。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.