hakeの日記

Windows環境でプログラミングの勉強をしています。

Go言語 - WALKでGUI - 何もないウィンドウ

ネット上に(日本語の)情報がほとんど無いのでドキュメントを見ながら勉強。
環境は、Windows8.1(32bit)上のGo言語1.5+WALKライブラリです。


ドキュメントは、GoDocServerを起動した状態で、

http://localhost:6060/pkg/github.com/lxn/walk/

を参照。walk直下に各ウィジェットで使えるメソッドが、declarativeの下に各ウィジェットが持っているフィールドとイベントの情報がある。


とりあえず何もないウィンドウを作ってみる。
MainWindowのイベントとして

    OnKeyDown        walk.KeyEventHandler
    OnKeyPress       walk.KeyEventHandler
    OnKeyUp          walk.KeyEventHandler
    OnMouseDown      walk.MouseEventHandler
    OnMouseMove      walk.MouseEventHandler
    OnMouseUp        walk.MouseEventHandler
    OnSizeChanged    walk.EventHandler

が用意されていますが、マウス関係は現状動作しないみたいです。(2015/11/26追記 動作する様になりました。)
下記はサイズ変更とキー押下イベントの結果を標準出力に出力するプログラム。

package main

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

import (
	"fmt"
	"os"
)

type MyMainWindow struct {
	*walk.MainWindow
}

func main() {
	mw := &MyMainWindow {}

	MW := MainWindow{
		AssignTo: &mw.MainWindow,
		Title: "メインウィンドウ",
		MinSize: Size {150, 200},
		Size   : Size {300, 400},

		OnSizeChanged : mw.sizeChanged, // ()は付けない。
		OnKeyPress    : mw.keyPress,
		OnMouseDown   : mw.mouseDown,   // 動作しない?
		}


	if _, err := MW.Run(); err != nil {
		fmt.Fprintln(os.Stderr, err)
		os.Exit(1)
	}
}

// ウィンドウサイズ変更イベント処理
func (mw *MyMainWindow) sizeChanged(){ fmt.Println("Size Changed") }

// キー押下イベント処理
func (mw *MyMainWindow) keyPress(k walk.Key){
	fmt.Printf("Key Press : %#v\n", k)
}

// マウスボタン押下イベント処理(動作しない?)
func (mw *MyMainWindow) mouseDown(x,y int, btn walk.MouseButton){
	fmt.Printf("Mouse Down x:%d y:%d\n", x, y)
}