tag:我实现了PreTranslateMessage(),在函数里面加入如下代码:
BOOL CPathCtrl::PreTranslateMessage(MSG* pMsg) 
           {
        // 设置控件拖动
        if (pMsg->message==WM_LBUTTONDOWN)
        {
FromHandle(pMsg->hwnd)->PostMessage(WM_SYSCOMMAND,SC_MOVE+1,0);
         }
         return CWnd::PreTranslateMessage(pMsg);
            }
                加入如下代码导致鼠标OnLButtonUp不响应,我在OnLButtonUp加入MessageBox,没有弹出消息框,做测试中怎么解决?这段代码是什么意思?我也不太理解!希望解释下,谢谢。search result:在网上Google下,没有找到相关的解决方案。在QQ群里也问了,没有很好的解决,希望大家给我提供个解决方案,在一次谢谢大家了

解决方案 »

  1.   

    只有鼠标按下后,系统才响应up消息估计得在其他地方响应鼠标down消息了
      

  2.   

    CPathCtrl 这是一个控件类???
    OnLButtonUp是在 CPathCtrl 这个类上加的?如果是这样的话,刚试过没问题。把FromHandle(pMsg->hwnd)->PostMessage(WM_SYSCOMMAND,SC_MOVE+1,0);注销试下呢
      

  3.   

    谢谢ouyh12345,我也是鼠标按下后实现的up消息啊,但是没有响应。当鼠标抬起的时候没有弹出消息对话框。你说的在其他地方响应down消息是什么意思?呵呵
      

  4.   

    谢谢Ghost90,CPathCtrl是我定义的控件,继承自CWnd,OnLButtonUp是在这个我定义的控件上加的消息映射函数。如果把FromHandle(pMsg->hwnd)->PostMessage(WM_SYSCOMMAND,SC_MOVE+1,0);注释掉,OnLButtonUp可以响应,但是CPathCtrl产生的对象就不可以移动了。有没有什么解决方法啊,谢谢。还有FromHandle(pMsg->hwnd)->PostMessage(WM_SYSCOMMAND,SC_MOVE+1,0);主要是什么意思啊?这是我用的别人的代码
      

  5.   

    FromHandle(pMsg->hwnd)->PostMessage(WM_SYSCOMMAND,SC_MOVE+1,0);的意思是当你按下鼠标左键时,发出系统消息参数SC_MOVE+1(估计应该是到NEXTWINDOW).估计因为你按LBUTTONDOWN而没有UP就去切换窗口了,所以UP不再响应.你把
    if (pMsg->message==WM_LBUTTONDOWN) 换成if (pMsg->message==WM_LBUTTONUP)再试.
      

  6.   

    if (pMsg->message==WM_LBUTTONDOWN)
                {
                FromHandle(pMsg->hwnd)->PostMessage(WM_SYSCOMMAND,SC_MOVE+1,0);
                 }
    如果鼠标左键按下就移动控件,现在问题是这样 如果执行
    FromHandle(pMsg->hwnd)->PostMessage(WM_SYSCOMMAND,SC_MOVE+1,0);
    鼠标响应消息就不会被发送到当前控件,因为你移动控件的操作没有结束,这是你在控件上双击鼠标,是可以响应鼠标单击消息的。
    正找怎么 结束 SC_MOVE+1 这个消息呢
      

  7.   

    if(pMsg->message==WM_LBUTTONDOWN)
    {
    FromHandle(pMsg->hwnd)->SendMessage(WM_SYSCOMMAND,SC_MOVE +1,0);
    PostMessage(WM_LBUTTONUP);
    }
      

  8.   

    谢谢liuchaotao,FromHandle(pMsg->hwnd)->PostMessage(WM_SYSCOMMAND,SC_MOVE+1,0);是用来实现当鼠标在控件上按下拖拽的时候控件移动的,但是我不知道这个消息是什么意思,刚你提提出的方法我试了,OnLButtonUp可以响应了,但是控件不能拖拽了。有没有别的好办法,谢谢
      

  9.   

    谢谢Ghost90,当我在程序中加入PostMessage(WM_LBUTTONUP); 时,这句FromHandle(pMsg->hwnd)->SendMessage(WM_SYSCOMMAND,SC_MOVE +1,0); 就不起作用了,即:鼠标按下拖拽控件的时候控件不在移动了。有没有其它处理办法?谢谢Ghost90
      

  10.   


    if(pMsg->message==WM_LBUTTONDOWN) 

    FromHandle(pMsg->hwnd)->SendMessage(WM_SYSCOMMAND,SC_MOVE +1,0); 
    PostMessage(WM_LBUTTONUP); 
    }这么写没问题的 注意这2句的顺序 要用SendMessage不用老谢了
      

  11.   

    Ghost90前辈,程序可以了。但是为什么用PostMessage不可以呢?这个问题困扰了我好久,今天总于解决了,太感激您了
      

  12.   

    Ghost90前辈,SC_MOVE+1是什么意思啊?FromHandle(pMsg->hwnd)->PostMessage(WM_SYSCOMMAND,SC_MOVE+1,0);是我摘抄别人的,只知道这句是为了当鼠标按下移动鼠标的时候控件可以移动的,麻烦您可以不可以在帮我解释下,谢谢
      

  13.   

    Ghost90前辈,又有个问题了,当按照您的方法设置,OnLButtonUp可以相应,但是OnLButtonDown里面的Invalidate(),即实现OnPaint()重绘没有调用。
      

  14.   

    你的问题好多!
    PostMessage 是把消息发送到消息队列里不管消息函数是否执行,马上返回,SendMessage是等消息执行完再返回。因为 PostMessage 函数立即返回,而你的鼠标左键没没有松开,所以响应不到lButtonUpSC_MOVE+1,这个参数的低4为是系统用的 +1 +2 +3 都可以,具体原因就不知道了把 Invalidate 放到 OnLButtonUp 的最后试试