void CTemp3View::OnMouseMove(UINT nFlags, CPoint point) 
{
MessageBox("mouse move");
CView::OnMouseMove(nFlags, point);
}
程序运行中移动一下鼠标就弹出一个MessageBox然后按ESC键关闭它,又马上弹出一个MessageBox
之后按一下ESC键又弹出MessageBox,一直持续下去,可是并没有移动鼠标啊?为什么?

解决方案 »

  1.   

    可能是窗口刷新时, WINDOWS给自己发个MouseMove消息以更新鼠标。你可以把MessageBox改成TRACE,
    然后在VC的DEBUG窗口看。
      

  2.   

    乱说,windows给自己发消息怎么会发到这个程序窗口呢:)
      

  3.   

    颠倒以下看看
    CView::OnMouseMove(nFlags, point);
    MessageBox("mouse move");
      

  4.   

    你虽然移了一下鼠标,但是move消息却要发狠多个(和mouse灵敏度有关),东临碣石的注意很好
      

  5.   

    查了一下,你mouse移动一下时,消息不是只发一条而是很多,所以会报很多次!~
      

  6.   

    我试了一下, 还是与屏幕刷新有关。
    出现对话框后, 你把鼠标移出该窗口外, 再取消对话框,
    它就不会再出来了。楼上所说的, 你mouse移动一下时,消息不是只发一条而是很多,
    不是很准确, 因为后到的MouseMove消息会冲掉先到的。
      

  7.   

    rtdb(东临碣石) 说的没错,
    如何区别这种假MouseMove和真的MouseMove?
    因为有这种假MouseMove我的程序才出错。怎么办?
      

  8.   

    MouseMove哪有真假?主要是你的设计有问题。
    没有程序一动鼠标就出对话框的。说说你本来想做什么吧。
      

  9.   

    不要用MessageBox()
    会出错的....
      

  10.   

    我的意图是当有窗口显示出来时不要接收到WM_MOUSEMOVE或
    能识别这个WM_MOUSEMOVE不是鼠标的移动产生的。
      

  11.   

    自己编的ToopTip由于区别不了两个MOUSEMOVE就出错了,所以就用MessageBox观察一下
    哪里出错了。
      

  12.   

    刚想到个办法: 你记下MOUSEMOVE时鼠标的位置。
    若是下次MOUSEMOVE还是同一位置,就可以不管了。BTW:  MessageBox观察一下哪里出错了。
           不如改为TRACE更好些。它不影响程序的运行。
      

  13.   

    什么TRACE?没试过,是调试命令吗?
      

  14.   

    就你现在的状态,
    直接把MessageBox换成TRACE就可以了。
    调试运行时, 信息会输出到VC的DEBUG窗口里。
      

  15.   

    为什么会出现WM_MOUSEMOVE消息?
    因为当关闭MessageBox时,FrameWnd框架就会向当前窗口发送鼠标消息,即使鼠标并为移动,因为该窗口又重新开始捕获鼠标消息了。因此如果你要建立CToolTipCtrl的衍生类或类似的类,必须区分这类消息,同时要注意这个ToolTip窗口必须是SWP_NOACTIVE。