情景再现:  我在对话框上添加了一个button的控件,然后添加了一个类CMyButton (派生于CButton),然后为这个button控件添加一个CMyButton类型的变量!~
此时,我在CMybutton中添加了响应WM_LButtonDOWN的响应消息函数,运行程序!!代码:void CMyButton::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
MessageBox(L"fuck why");
CButton::OnLButtonDown(nFlags, point);
}问题来了:  程序运行起了,我点击了button控件显示了"fuck why",然后我再点击对话框上面(注意:此时没有点击button按钮上面),居然还是弹出了 ”fuck why“ 怎么会呢,我没有点击button的啊!不懂为什么!~  谁能说说啦,谢谢!
另外:当我把 CButton::OnLButtonDown(nFlags, point); 这句去掉后,这时就不会出现我上面所描述的情况了!
求解!~      mfc大神在哪里!

解决方案 »

  1.   

    刚刚还发现,居然我点击了button控件显示了"fuck why",然后再次点击屏幕的任何地方,此时连对话框都不用点,还是会出现"fuck why"!哇   太难以理解了!~~~~
      

  2.   

    MessageBox弹出的是模态对话框。
      

  3.   

    WM_LBUTTONDOWN消息当用户在window客户区域点击鼠标左键的时候发送。如果当前鼠标没有被捕捉,消息发送给鼠标下面的window窗体。否则,消息发送给当前捕捉鼠标消息的方法。
      

  4.   

    为了保证按钮各个状态的处理按钮一般会捕获鼠标
    通常是在WM_LBUTTONDOWN消息中SetCapture
    在WM_LBUTTONUP消息中ReleaseCapture
    这个操作肯定是CButton的OnLButtonDown完成的
    而你弹出消息框破坏了消息结构
    Button没有接到WM_LBUTTONUP消息
    这个消息被主动弹出的MessageBox抢走了
    所以Button一直在捕获状态没有释放
      

  5.   

    WM_LBUTTONDOWN消息当用户在window客户区域点击鼠标左键的时候发送。如果当前鼠标没有被捕捉,消息发送给鼠标下面的window窗体。否则,消息发送给当前捕捉鼠标消息的方法。