MFC捕捉子控件鼠标消息莫名奔溃

前置条件:
窗口中有个按钮,在PreTranslateMessage中捕捉鼠标消息,交给窗口对应的鼠标消息进行处理。

BOOL PreTranslateMessage(MSG* pMsg)
{
    // 捕获的消息坐标基于屏幕
    if (pMsg->message == WM_MOUSEMOVE)
    {
        OnMouseMove(MK_MBUTTON, pMsg->pt);
    }
    else if(pMsg->message == WM_LBUTTONDOWN)
    {
        OnLButtonDown(MK_MBUTTON, pMsg->pt);
    }
    else if(pMsg->message == WM_LBUTTONUP)
    {
        OnLButtonUp(MK_MBUTTON, pMsg->pt);
    }

    return CDialog::PreTranslateMessage(pMsg);
}

然后在消息处理过程中,删除了按钮,这时程序奔溃。跟踪断点信息,发现是找不到顶级窗口,当时完全不知道什么原因。过了几天,又仔细思考了一下,发现是捕捉了按钮的鼠标消息,又在处理过程中删除了鼠标,这时消息还没结束,导致奔溃。

解决方法:把删除按钮操作放到一个消息处理函数里,在鼠标消息中Post消息来处理。

猜你喜欢

转载自blog.csdn.net/wizardtoh/article/details/50482346