golang walk界面库 最小化事件

示例图:

最小化事件

package main

import (
    "fmt"
    "log"
    "syscall"

    "github.com/lxn/walk"
    . "github.com/lxn/walk/declarative"
    "github.com/lxn/win"
)

var (
    libuser32 *syscall.DLL
    isIconic  *syscall.Proc
)

func init() {
    // Library
    libuser32 = syscall.MustLoadDLL("user32.dll")
    // functions
    isIconic = libuser32.MustFindProc("IsIconic")
}

/* 确定指定的窗口是否被最小化(图标)
https://msdn.microsoft.com/en-us/library/windows/desktop/ms633527(v=vs.85).aspx
*/
func IsIconic(hWnd win.HWND) bool {
    ret, _, _ := isIconic.Call(uintptr(hWnd))
    return ret == win.TRUE
}

type MyWindow struct {
    *walk.MainWindow
}

func main() {
    mw := new(MyWindow)
    if err := (MainWindow{
        AssignTo: &mw.MainWindow,
        Title:    "最小化测试",
        MinSize:  Size{280, 200},
        Layout:   HBox{},
        Children: []Widget{
            PushButton{
                Text: "测试",
                OnClicked: func() {
                    walk.MsgBox(mw, "测试", "最小化事件捕捉!", walk.MsgBoxIconInformation)
                },
            },
        },
    }).Create(); err != nil {
        log.Fatal(err)
    }
    mw.SizeChanged().Attach(func() {
        if mw.X() == -32000 && mw.Y() == -32000 {
            fmt.Printf("X, Y == -32000 --> 窗口最小化, X = %d, Y = %d\n", mw.X(), mw.Y())
        }
        if IsIconic(mw.Handle()) {
            message := fmt.Sprintf("IsIconic --> 窗口最小化, X = %d, Y = %d", mw.X(), mw.Y())
            walk.MsgBox(mw, "事件", message, walk.MsgBoxIconWarning)
        }
    })
    mw.Run()
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值