[Go語言寫介面]一、使用xcgui完成go語言第一個軟體介面

twgh發表於2022-08-27

一、先獲取xcgui庫

go get github.com/twgh/xcgui

二、到網盤下載xcgui.dll

百度雲 , 藍奏雲

網盤裡有64位的和32位的dll,一般選擇64位的,go編譯的程式預設也是64位的。

xcgui.dll需要和編譯出來的程式放在一起,但每寫一個程式都重複放的話就很麻煩了。

在開發時我建議把xcgui.dll放到C:\Windows\System32目錄下,這樣就不需要每次都把dll和程式放在一起了。

三、開始寫程式碼

剛開始你只需要知道3個包,程式包:app、視窗包:window、常量包:xcc

四、最簡單的程式程式碼

package main

import (
    "github.com/twgh/xcgui/app"
    "github.com/twgh/xcgui/window"
    "github.com/twgh/xcgui/xcc"
)

func main() {
    // 炫彩_初始化, 引數填true是啟用D2D硬體加速, 效果更好. 但xp系統不支援d2d, 這時候你就得填false來關閉d2d了
    a := app.New(true)
    // 建立普通視窗, 寬300, 高200, 標題是"xcgui window", xcc.Window_Style_Default是使用預設視窗風格
    w := window.New(0, 0, 300, 200, "xcgui window", 0, xcc.Window_Style_Default)
    // 顯示視窗
    w.Show(true)
    // 執行訊息迴圈, 程式會被阻塞在這裡不退出, 當炫彩視窗數量為0時退出
    a.Run()
    // 退出介面庫釋放資源
    a.Exit()
}

五、編譯程式

go build -ldflags="-s -w -H windowsgui"

引數解釋:-H windowsgui會隱藏黑視窗,-s -w去除了符號表和除錯資訊,這樣可以減小軟體體積。

六、介面效果

直接編譯後大小為1.61M,使用upx64位壓縮後大小變為386K

執行效果

七、把dll編譯程式序裡,執行時寫出

先把xcgui.dll放到專案目錄裡,然後看下面程式碼:

package main

import (
    _ "embed"
    "os"
    "github.com/twgh/xcgui/app"
    "github.com/twgh/xcgui/window"
    "github.com/twgh/xcgui/xcc"
)

//go:embed XCGUI.dll
var dll []byte

func main() {
    os.WriteFile("xcgui.dll", dll, 0666)
    // 炫彩_初始化, 引數填true是啟用D2D硬體加速, 效果更好. 但xp系統不支援d2d, 這時候你就得填false來關閉d2d了
    a := app.New(true)
    // 建立普通視窗, 寬300, 高200, 標題是"xcgui window", xcc.Window_Style_Default是使用預設視窗風格
    w := window.New(0, 0, 300, 200, "xcgui window", 0, xcc.Window_Style_Default)
    // 顯示視窗
    w.Show(true)
    // 執行訊息迴圈, 程式會被阻塞在這裡不退出, 當炫彩視窗數量為0時退出
    a.Run()
    // 退出介面庫釋放資源
    a.Exit()
}

八、如果不想讓使用者看到執行目錄有個dll檔案,可以把dll釋放到系統臨時目錄裡

這樣使用者就感覺不到dll的存在了,和一個二進位制檔案也沒啥太大區別。

package main

import (
    _ "embed"
    "github.com/twgh/xcgui/app"
    "github.com/twgh/xcgui/window"
    "github.com/twgh/xcgui/xc"
    "github.com/twgh/xcgui/xcc"
)

//go:embed XCGUI.dll
var dll []byte

func main() {
    // 把 xcgui.dll 寫出到windows臨時目錄
    err := xc.WriteDll(dll)
    if err != nil {
        panic(err)
    }
    // 炫彩_初始化, 引數填true是啟用D2D硬體加速, 效果更好. 但xp系統不支援d2d, 這時候你就得填false來關閉d2d了
    a := app.New(true)
    // 建立普通視窗, 寬300, 高200, 標題是"xcgui window", xcc.Window_Style_Default是使用預設視窗風格
    w := window.New(0, 0, 300, 200, "xcgui window", 0, xcc.Window_Style_Default)
    // 顯示視窗
    w.Show(true)
    // 執行訊息迴圈, 程式會被阻塞在這裡不退出, 當炫彩視窗數量為0時退出
    a.Run()
    // 退出介面庫釋放資源
    a.Exit()
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章