关于MFC的窗口关闭和消息机制

时间:2021-10-08 05:36:10
最近被MFC的窗口关闭和消息所困然,为什么窗口关闭之后还能收到鼠标消息!!!
描述如下:
假设有3两个窗口,窗口1,窗口2和窗口3,窗口3类似于textbox那种,但不是MFC的内置的控件,窗口2是窗口1的子窗口,窗口3是窗口2的子窗口。
窗口1以重写Onclose()给窗口2发close消息
void CDebugPopupWnd::OnClose()
{
if(m_pFormWnd != NULL) m_pFormWnd->PostMessage(WM_CLOSE, NULL, NULL);
//if(m_pFormWnd != NULL) m_pFormWnd->SendMessage(WM_CLOSE, NULL, NULL);
__super::OnClose();
}

窗口2重写onclose()给窗口3发close消息
void CDebugFormWnd::OnClose()
{
if(m_pPCProcessGridSL != NULL) m_pPCProcessGridSL->m_wndEditor.PostMessage(WM_CLOSE, NULL, NULL);
__super::OnClose();
}


现在在窗口3里面,做移动鼠标,然后点击关闭窗口1,结果窗口3对象的this指针被毁坏的情况下收到了MouseMove消息,导致程序崩溃?
求大神解释!

5 个解决方案

#1


眼看就要沉了,有没有人来帮忙解决下啊,谢谢

#2


父窗口处理OnClose的时候,等子窗口都处理完了,自己再关闭

#3


将PostMessage改为SendMessage,区别在百度上查下

#4


引用 3 楼 wmluoxiaojun 的回复:
将PostMessage改为SendMessage,区别在百度上查下

#5


可能是在要销毁但还没有销毁之前这段时间收到的。postmessage不等处理完立刻返回。打印log或trace看看先后顺序。你是java转c吧?

#1


眼看就要沉了,有没有人来帮忙解决下啊,谢谢

#2


父窗口处理OnClose的时候,等子窗口都处理完了,自己再关闭

#3


将PostMessage改为SendMessage,区别在百度上查下

#4


引用 3 楼 wmluoxiaojun 的回复:
将PostMessage改为SendMessage,区别在百度上查下

#5


可能是在要销毁但还没有销毁之前这段时间收到的。postmessage不等处理完立刻返回。打印log或trace看看先后顺序。你是java转c吧?