Go言語|walkでwindows環境のGUIアプリを作成する

Go
田中太郎
田中太郎

Go言語(golang)でwindows環境のGUIを作成できるlxn/walkを使用してみます

lxn/walkとは

BSD-3-Clauseのwindows用GUIライブラリです

環境を作成する

下記をコピーしてtest.manifestという名前のファイルを作成します

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="SomeFunkyNameHere" type="win32"/>
    <dependency>
        <dependentAssembly>
            <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/>
        </dependentAssembly>
    </dependency>
    <application xmlns="urn:schemas-microsoft-com:asm.v3">
        <windowsSettings>
            <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2, PerMonitor</dpiAwareness>
            <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">True</dpiAware>
        </windowsSettings>
    </application>
</assembly>

akavel/rsrcをgitで入手して、rsrcコマンドでtest.manifestをrsrc.sysoに変換します

go get github.com/akavel/rsrc
rsrc -manifest test.manifest -o rsrc.syso

test.goを作成します

package main

import (
	"log"

	"github.com/lxn/walk"
	. "github.com/lxn/walk/declarative"
)

func main() {
	var app *walk.TextEdit
	if _, err := (MainWindow{
		Title:   "Test", // タイトル
		MinSize: Size{300, 200}, // ウィンドウの最小サイズ 
		Layout:  VBox{}, 
		Children: []Widget{ // ウィンドウ内の要素
			TextEdit{AssignTo: &app}, // テキストエディタをウィンドウ内に作成
		},
	}).Run(); err != nil {
		log.Fatal(err)
	}
}

アプリを実行する

作成したファイル(test.go, rsrc.syso)があるディレクトリで以下のコマンドを実行します

go build -ldflags="-H windowsgui"
# go buildでもexeファイルを作成できますが、
# オプションを付けることで実行するときにコマンドプロンプトが開かなくなります。

test.exeが作成されます

実行するとテキストエディタが表示されます

まとめ

Go言語でWindowsのGUIアプリを作成しました

コメント

タイトルとURLをコピーしました