gpt4 book ai didi

windows - 如何在 Windows 中子类化一个窗口? (使用围棋)

转载 作者:IT王子 更新时间:2023-10-29 02:06:26 29 4
gpt4 key购买 nike

我想对实际窗口进行子类化以检测其大小何时发生变化。

这是我尝试使用 CallWindowProcW 和 SetWindowLongW 对其进行子类化的相关代码,但是当我最大化窗口时它没有显示任何消息,所以我假设我错误地设置了其中的一些程序。怎么做?

var oldWindowProc uintptr

func windowProc(hwnd syscall.Handle, msg uint32, wparam, lparam uintptr) (rc uintptr) {
switch msg {
case WM_SIZE:
fmt.Println("Size")
if wparam == SIZE_MAXIMIZED {
fmt.Println("Changed!")
}
default:
return CallWindowProcW(oldWindowProc, hwnd, msg, wparam, lparam)
}
return 0
}

func main() {
oldWindowProc, _ = SetWindowLongW(syscall.Stdin, GWLP_WNDPROC,
syscall.NewCallback(windowProc))

for {

}
}

最佳答案

我对winapi不是很了解,不过你的代码好像是closely resembles an examplego-winapi wrapper

使用那个包装库,这个修改后的版本似乎对我有用:

( Full code )

截图

// window procedure
func WndProc(hwnd winapi.HWND, msg uint32, wparam uintptr, lparam uintptr) uintptr {
switch msg {
case winapi.WM_SIZE:
if wparam == SIZE_MAXIMIZED {
fmt.Println("Changed!")
}
}
// call original procedure
return winapi.CallWindowProc(uintptr(oldWndProc), hwnd, msg, wparam, lparam)
}

我相信您可以查看该包装器库并推导出更直接的方法。

关于windows - 如何在 Windows 中子类化一个窗口? (使用围棋),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12414669/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com