
[英]Does PostQuitMessage() goes into WM_DESTROY or WM_CLOSE?
[英]Child windows does not receive WM_DESTROY?
我把winapi CreateWindowEx 打包成一个简单的类。 由于每个窗口共享相同的 wndProc(hwnd,msg,wparam,lparam),我将 CreateWindowEx 创建的每个窗口放入一个映射中来分发 msg,如下所示:
wndProc(hwnd, msg, wparam, lparam){
if(map[hwnd]!=nil){
switch(msg){
map[hwnd].wndProc(...)
}
}
}
每次窗口或其父窗口被销毁时,将其从地图中删除:
case WM_DESTROY: delete(map, hwnd)
但是按钮之类的东西不会收到 WM_DESTROY。 我在 WM_NOTIFY 和 WM_COMMAND 中打印了所有消息,但我注意到了。
那么如何在正确的时间从地图中删除这些子窗口呢? 或者一种在不创建 hwnd 映射的情况下分发 msg 的方法?
那么如何在正确的时间从地图中删除这些子窗口呢?
您必须使用SetWindowLongPtr(GWL_WNDPROC)
或SetWindowSubClass()
您创建的每个窗口进行子类化,然后您将收到所有WM_DESTROY
消息。
或者一种在不创建 hwnd 映射的情况下分发 msg 的方法?
像 ATL 和 VCL 这样的框架通过为每个窗口动态分配一个 thunk 并将对象指针放在 thunk 中来处理这个问题,然后使用 thunk 作为窗口过程。 这样,无论何时调用 thunk,它都会将消息直接传递给其关联的对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.