gpt4 book ai didi

windows - 子窗口没有收到 WM_DESTROY?

转载 作者:可可西里 更新时间:2023-11-01 10:56:01 28 4
gpt4 key购买 nike

我把winapi CreateWindowEx打包成一个简单的类。由于每个窗口共享相同的 wndProc(hwnd,msg,wparam,lparam),我将 CreateWindowEx 创建的每个窗口放入一个映射中以分发 msg,如下所示:

wndProc(hwnd, msg, wparam, lparam){
if(map[hwnd]!=nil){
switch(msg){
map[hwnd].wndProc(...)
}
}
}

每次销毁窗口或其父窗口时,将其从 map 中删除:

case WM_DESTROY: delete(map, hwnd)

但是按钮之类的东西不会收到 WM_DESTROY。我在 WM_NOTIFY 和 WM_COMMAND 中打印了所有消息,但我注意到了。

那么我怎样才能在正确的时间从 map 上删除那些子窗口呢?或者在不创建 hwnd 映射的情况下分发消息的方法?

最佳答案

他们肯定确实明白了这个信息。但是它们的窗口过程在 Windows 内部,而不是在您的程序内部。所以你永远看不到它。您可以在 MSDN documentation 中阅读的内容,请注意 WM_DESTROY 没有得到任何特殊处理。也不会生成您的父窗口可以看到的通知。

当您看到父窗口被销毁时自动删除所有子窗口,subclassing controls是 C++ 类库包装器的一个非常标准的要求。顺便说一句,最好不要自己发明,这已经做过很多次了。

关于windows - 子窗口没有收到 WM_DESTROY?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23044113/

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