我用的是EVC4.0
想做一个触摸的程序 所以用到了OnMouseMove但是在这个过程中发现了个问题:
Dialog1中OnMouseMove函数调用Dialog2(而且Dialog2中也有OnMouseMove函数,用来调用Dialog3的)当我触发Dialog1中的OnMouseMove,调用了Dialog2,但同时Dialog2中的OnMouseMove也被调用了,
所以又会到了Dialog3界面。不知道什么原因 谢谢指教

解决方案 »

  1.   

    当我触发Dialog1中的OnMouseMove,调用了Dialog2,但同时Dialog2中的OnMouseMove也被调用了, 
    ==用程序说话,把代码拿出来。
      

  2.   

    调用Dialog2后,你还是在onMouseMove吧,可能你马上手就松开了,但是没有程序快,所以Dialog2弹出后,你在Dialog2上面Move了
      

  3.   

    在TestDlg.cpp中添加了OnMouseMove函数void CTestDlg::OnMouseMove(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    Move move;//Move 是Dialog2的类
    move.DoModal();
    CDialog::OnMouseMove(nFlags, point);
    }
    在Move.cpp中同样添加OnMouseMovevoid Move::OnMouseMove(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    MessageBox(_T("aa"));//问题在这里 (1)
    CDialog::OnMouseMove(nFlags, point);
    }
    (1)第一个OnMouseMove调用 执行后 ,Dialog2显示出来,这样就应该完成了,
    但是Dialog2对应的void Move::OnMouseMove也被调用了,也就是出现了提示“aa”?
    什么原因?
      

  4.   

    我不知道你的程序怎么用啊。OnMouseMove中调用DoModal,你的鼠标还能动吗?
    你把Move对话框的初始位置放远一点,别用默认的位置,这样正好你鼠标就在那里
      

  5.   

    原因是这样的。
    窗口在状态改变的时候,如果它的领域里有鼠标,他就会收到WM_MOUSEMOVE消息,尽管鼠标没有被挪动。
    这是一个现实,如果你想利用WM_MOUSEMOVE消息做什么事情,注意到这一点就好了。状态改变=active, focus, menu 等等的变化。
    ---------
    为什么会这样?我个人认为微软这样做是为了防止没有受到应该有的WM_MOUSEMOVE消息。很显然有点粗糟。
      

  6.   

    我作的程序是在PDA里运行的。1 可能是第一次触摸屏幕,弹出Dialog2时 也触发了OnMouseMove,以至于弹出Dialog32 可能就是楼上说的 窗口在状态改变的时候,如果它的领域里有鼠标,
    他就会收到WM_MOUSEMOVE消息,尽管鼠标没有被挪动。怎么解决呢 1、我尝试着在初始化函数中 加 Sleep,但是发现不可以2、在窗口初始化完成后,加一个标志,初始化之前不允许OnMouseMove不知道行不行
      

  7.   

    搞定了我在OnLButtonDown里面加一个标志位只有在本页面触发OnLButtonDown后才可以触发OnMouseMove 这样就不存在上一个界面也触发下一个界面的OnMouseMove 了