窗体的创建(2)

sin 2021-09-21 PM 770℃ 0条

窗体的创建

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)
}

20210921151949.png

大部分内容都比较好理解,我们这里有个window operation,叫map。下面是文档对map的解释。文档来自于XCB。XGB就是XCB的go语言版本。

20210921152426.png

标签: none

非特殊说明,本博所有文章均为博主原创。

评论啦~