在pretranslatemessage里面判断,如果是鼠标左键就做你想做的事,然后返回就行了。在pretranslatemessage里要用相应的FLAG哈,就是说处理之后直接删除该消息,不往队列里送了。

解决方案 »

  1.   

    不会吧,我用的时候怎么没出现你说的情况
    写出你的代码来看看
    你用的是SDK还是MFC?
      

  2.   

    重载这个消息不就行了。
    用Class Wizard很容易的。
      

  3.   

    对于这个问题,在MFC中有两种解决方法:
    1.从CButton继承一个你自己的Button类,然后重载OnLButtonDown消息响应函数,在OnLButtonDown中
    自己返回TRUE,不要调用它的缺省处理函数。这种方法比较麻烦,但是具有良好的程序结构,程序的
    扩展性也很好,在这种方法中,Button实际上响应了WM_LBUTTONDOWN消息,但是你可以把它做的就像没
    有响应一样,就是说,它的响应就是没有响应:
    class CYourButton:public CButton{
    ...
    }
    void CYourDlg::OnLButtonDown(UINT nFlags, CPoint point)
    {
        ...
        return TRUE;
    }2.在你的Dialog的WM_LBUTTONDOWN消息响应函数OnLButtonDown中对Mouse的坐标进行判断,如果在你要
    处理的Button中,就返回TRUE。这种方法简单易用,但是扩展性很差,在这种方法中,你的Button根本就
    不会收到WM_LBUTTONDOWN消息:
    BOOL CYourDlg::PreTranslateMessage(MSG* pMsg) 
    {
    CRect rButtonRect;
    CButton *pButton = (CButton*)GetDlgItem( IDC_YOURID );
    pButton->GetClientRect( &rButtonRect );
    pButton->ClientToScreen( &rButtonRect );
    ClientToScreen( &point );
    if( rButtonRect.PtInRect(point) )
    return TRUE;
    ...
    }
      

  4.   

    设置标志行不行?如果Dialog已处理过设置标志为true,在按钮的事件里判断一下标志?最好还是用yb的建议吧
      

  5.   

    我找到问题了,原来是我在DLG里用了SetCapture(),这样所有的消息都由DLG来处理了.我用了dragonex建议的方法.yb的建议也给了我很多启发.
    感谢大家的帮忙.
      

  6.   

    派生CButton类,在处理LBUTTONDOWN消息的函数中,不调用基类函数即可