void CTemp3View::OnMouseMove(UINT nFlags, CPoint point)
{
MessageBox("mouse move");
CView::OnMouseMove(nFlags, point);
}
程序运行中移动一下鼠标就弹出一个MessageBox然后按ESC键关闭它,又马上弹出一个MessageBox
之后按一下ESC键又弹出MessageBox,一直持续下去,可是并没有移动鼠标啊?为什么?
{
MessageBox("mouse move");
CView::OnMouseMove(nFlags, point);
}
程序运行中移动一下鼠标就弹出一个MessageBox然后按ESC键关闭它,又马上弹出一个MessageBox
之后按一下ESC键又弹出MessageBox,一直持续下去,可是并没有移动鼠标啊?为什么?
然后在VC的DEBUG窗口看。
CView::OnMouseMove(nFlags, point);
MessageBox("mouse move");
出现对话框后, 你把鼠标移出该窗口外, 再取消对话框,
它就不会再出来了。楼上所说的, 你mouse移动一下时,消息不是只发一条而是很多,
不是很准确, 因为后到的MouseMove消息会冲掉先到的。
如何区别这种假MouseMove和真的MouseMove?
因为有这种假MouseMove我的程序才出错。怎么办?
没有程序一动鼠标就出对话框的。说说你本来想做什么吧。
会出错的....
能识别这个WM_MOUSEMOVE不是鼠标的移动产生的。
哪里出错了。
若是下次MOUSEMOVE还是同一位置,就可以不管了。BTW: MessageBox观察一下哪里出错了。
不如改为TRACE更好些。它不影响程序的运行。
直接把MessageBox换成TRACE就可以了。
调试运行时, 信息会输出到VC的DEBUG窗口里。
因为当关闭MessageBox时,FrameWnd框架就会向当前窗口发送鼠标消息,即使鼠标并为移动,因为该窗口又重新开始捕获鼠标消息了。因此如果你要建立CToolTipCtrl的衍生类或类似的类,必须区分这类消息,同时要注意这个ToolTip窗口必须是SWP_NOACTIVE。