Go版GTK:鼠标事件应用—窗口移动

原文地址:https://blog.csdn.net/tennysonsky/article/details/79284225

创建窗口时,如果指定类型为弹出类型,即为无边框窗口,这时候,无法通过边框移动窗口,这时可以借助鼠标点击、移动事件实现窗口的移动。

坐标说明: 
这里写图片描述

移动坐标说明: 
这里写图片描述

示例代码:

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()
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值