窗体的创建
package main
import (
"log"
"github.com/BurntSushi/xgb/xproto"
"github.com/BurntSushi/xgbutil"
"github.com/BurntSushi/xgbutil/ewmh"
"github.com/BurntSushi/xgbutil/xevent"
"github.com/BurntSushi/xgbutil/xwindow"
)
func main() {
// 建立X连接
X, err := xgbutil.NewConn()
if err != nil {
log.Fatal(err)
}
// 获取一个window id
win, err := xwindow.Generate(X)
if err != nil {
log.Fatal(err)
}
// 创建窗口
// func (*xwindow.Window).Create(parent xproto.Window, x int, y int, width int, height int, valueMask int, valueList ...uint32)
// parent: 父窗口
// x, y, width, height
// valueMask, valueList : 窗口属性以及属性值
win.Create(X.RootWin(), 0, 0, 300, 300, xproto.CwBackPixel, 0x3366ff)
// 优雅关闭
win.WMGracefulClose(func(w *xwindow.Window) {
xevent.Detach(X, w.Id)
w.Destroy()
xevent.Quit(X)
})
// 设置标题
err = ewmh.WmNameSet(X, win.Id, "中文标题")
if err != nil {
log.Fatal("error name\n")
}
// 显示窗口
win.Map()
xevent.Main(X)
}
大部分内容都比较好理解,我们这里有个window operation,叫map。下面是文档对map的解释。文档来自于XCB。XGB就是XCB的go语言版本。