描述如下:
假设有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
顶
#5
可能是在要销毁但还没有销毁之前这段时间收到的。postmessage不等处理完立刻返回。打印log或trace看看先后顺序。你是java转c吧?
#1
眼看就要沉了,有没有人来帮忙解决下啊,谢谢
#2
父窗口处理OnClose的时候,等子窗口都处理完了,自己再关闭
#3
将PostMessage改为SendMessage,区别在百度上查下
#4
顶
#5
可能是在要销毁但还没有销毁之前这段时间收到的。postmessage不等处理完立刻返回。打印log或trace看看先后顺序。你是java转c吧?