創建窗口時,如果指定類型爲彈出類型,即爲無邊框窗口,這時候,無法通過邊框移動窗口,這時可以藉助鼠標點擊、移動事件實現窗口的移動。
座標說明:
移動座標說明:
示例代碼:
package main
import (
// "fmt"
"os"
"unsafe"
"github.com/mattn/go-gtk/gdk"
"github.com/mattn/go-gtk/glib"
"github.com/mattn/go-gtk/gtk"
)
func main() {
gtk.Init(&os.Args)
window := gtk.NewWindow(gtk.WINDOW_POPUP) //新建窗口,彈出類型,即爲無邊框窗口
window.SetPosition(gtk.WIN_POS_CENTER) //默認居中顯示
window.SetDefaultSize(480, 320) //設置大小
var x, y int
//鼠標按下事件處理
window.Connect("button-press-event", func(ctx *glib.CallbackContext) {
//獲取鼠鍵按下屬性結構體變量,系統內部的變量,不是用戶傳參變量
arg := ctx.Args(0)
event := *(**gdk.EventButton)(unsafe.Pointer(&arg))
if event.Button == 1 { //左鍵
x, y = int(event.X), int(event.Y) //保存點擊的起點座標
} else if event.Button == 3 { //右鍵
//右鍵,關閉窗口
gtk.MainQuit()
}
})
//鼠標移動事件處理
window.Connect("motion-notify-event", func(ctx *glib.CallbackContext) {
//獲取鼠標屬性結構體變量,系統內部的變量,不是用戶傳參變量
arg := ctx.Args(0)
//還是EventButton
event := *(**gdk.EventButton)(unsafe.Pointer(&arg))
//移動窗口
window.Move(int(event.XRoot)-x, int(event.YRoot)-y)
})
//添加鼠標按下事件
window.SetEvents(int(gdk.BUTTON_PRESS_MASK | gdk.BUTTON1_MOTION_MASK))
window.ShowAll() //顯示控件
gtk.Main()
}