前置条件:
窗口中有个按钮,在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消息来处理。
本文探讨了在PreTranslateMessage中处理鼠标消息时遇到的问题,即在消息处理过程中删除按钮导致程序崩溃的情况,并提出了解决方案,建议将删除操作放置于特定的消息处理函数中。

2469

被折叠的 条评论
为什么被折叠?



