我继承了CButton类里面的OnLButtonDown和OnLButtonUp函数,我按下鼠标的时候响应了OnLButtonDown函数,但是我再击该鼠标时仍然响应的是OnLButtonDown函数,并没有响应OnLButtonUp函数,请问什么原因呢?望帮忙解决下...

解决方案 »

  1.   

    你的OnLButtonDown和OnLButtonUp函数中你写了什么?不会又是AfxMessageBox/MessageBox之类的吧
      

  2.   

    能说的详细点么?下边是代码:
    void CNewButton::OnLButtonDown(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    // MessageBox("down",NULL,MB_OK);

    CButton::OnLButtonDown(nFlags, point);
    MessageBox("down",NULL,MB_OK);
    }void CNewButton::OnLButtonUp(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default

    CButton::OnLButtonUp(nFlags, point);
    MessageBox("up",NULL,MB_OK);
    }
      

  3.   

    MessageBox以后焦点就变成对话框上面了呀
      

  4.   

    @tiger9991 谢谢你 你说的有道理,我的问题应该是在那儿了,如果要显示MessageBox的话有没有什么好的解决方案呢 将焦点设在按钮上?
      

  5.   

    将MessageBox放在CButton::OnLButtonDown前面,CButton默认应该会SetCapture的
    MessageBox("down",NULL,MB_OK);
    CButton::OnLButtonDown(nFlags, point);
      

  6.   

    [Quote=引用 9 楼  的回复:]将MessageBox放在CButton::OnLButtonDown前面,CButton默认应该会SetCapture的
    MessageBox("down",NULL,MB_OK);
    CButton::OnLButtonDown(nFlags, point);
    不行哈,那样的话变成对话框捕获单击按钮的消息,只要在对话框上一单击按钮就响应了OnLButtonDown函数,而且不会响应OnLButtonUp函数...
      

  7.   

    确实,要主动发WM_LBUTTONUP消息
    MessageBox("down",NULL,MB_OK);
    CButton::OnLButtonDown(nFlags, point);
    SendMessage(WM_LBUTTONUP);
      

  8.   

    其实主动发WM_LBUTTONUP消息,就失去WM_LBUTTONUP的意义了
    没有响应OnLButtonUp函数是因为没有满足触发WM_LBUTTONUP的条件,弹出那个MessageBox一般人都会习惯性的用鼠标去点确定关闭,当MessageBox关闭后已经松开了鼠标左键,那时何来的WM_LBUTTONUP呢?只有你一直不松开鼠标左键而用键盘将MessageBox关闭后才松开鼠标左键,才可能触发WM_LBUTTONUP消息。
      

  9.   

    呵呵,是啊,失去意义了。。MessageBox确实阻碍Up消息了要不你把MessageBox放到up消息函数里面去吧
      

  10.   

    根据状态不同加个计数器或者bool值 根据值来判断执行方向
     OnLButtonDown(){
       if(bool){
         显示文字
    }else 恢复状态
    }
      

  11.   

    点的太快了,鼠标点下抬起太快了,你把buttondown中的messagebox注释掉,这时候你看看是不是响应BUTTONUP