walk Layout
今回遊んだコードはこれがベース。昨日(だったけ)作ったコードから少しだけ変えた。
package main import ( "github.com/lxn/walk" . "github.com/lxn/walk/declarative" ) func main() { var te1, te2 *walk.TextEdit MainWindow{ Title: "hello", Size: Size{320, 240}, Layout: HBox{}, Children: []Widget { TextEdit { AssignTo: &te1, }, TextEdit { AssignTo: &te2, }, }, }.Run() }
Layoutというのはインターフェイス型で、それを満たす構造体にHBoxとVBoxと、Gridというのがあるみたい。
どれも
type HBox struct { Margins Margins Spacing int MarginsZero bool SpacingZero bool }
という感じになってるみたいなんだけど、とりあえずはこの中身をいじるのはまた今度。
Gridはおいといて、'V'と'H'はVertical(垂直)とHorizontal(水平)の略であるのは想像に難くない。
前の日記に書き忘れたが、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> </assembly>
これをtestwalk.exe.manifestという名前で保存する。
どうも使い回しができるっぽいので、(実行ファイル名).manifestという名前でコピーして使ってる。
まあとりあえず、動かした結果がこれ。
テキストボックスが二つ横に並んでる。
そして
Layout: VBox{},
と書き換えると
こんな感じになる。予想どおりVerticalとHorizontalだった。
Gridは試してみたら実行時エラーで動かなかったので、違う使い方かもしれない。
Childrenは、Widget型のスライスで、まあWidget型がいくつか並んでいるみたい。
そしてWidget型はインターフェイスで、とにかくたくさんの型が入るみたい。
今回使ったTextEdit型の構造体とか、今度使う予定のPushButton型とか、いろいろ。
とりあえずdeclarativeの下で
grep Widgetinfo *.go | grep func | less
とかしたらいっぱいでてきたので、まあそれくらいいっぱい型があるんだろう。
今日はこれぐらいで許してもらって、次はボタンを押してなんかできるようになるのが目標。