CMyButton  继承  CButton
     在CMyButton类中 重载了 OnLButtonDown函数     函数内部:
        MessageBox(L"123");
        CButton::OnLButtonDown(nFlags, point);
     在Dlg环境中,diaolg中添加了一个button,关联类是CMyButton,点击弹出提示对话框"123"(预期效果)
     之后,只要该dialog获得焦点,点击鼠标左键,总会弹出提示对话框"123"
     不明白为什么?  
     这情况是怎么回事? 
   

解决方案 »

  1.   

    响应一次OnLButtonDown函数,就会运行一次MessageBox(L"123");
      

  2.   

    那就是OnLButtonDown又被调用到了。所以可以将MessageBox(L"123");改为TRACE(L"123");,在调试模式下测试。
      

  3.   

    为什么之后点击dialog中任何位置 都会相应OnLButtonDown函数呢?  能解释下吗 ?
      

  4.   

    不加MessageBox(L"123"); 不会出现之前的情况   但是我的问题还是没有解决  
      

  5.   

    // CButton::OnLButtonDown(nFlags, point); 注释掉
      

  6.   

    按逻辑上来说是应该没有这句  CButton::OnLButtonDown(nFlags, point)
      

  7.   

    同意6楼,感觉不应该重载 OnLButtonDown函数,而是应该重载OnBnClickedButton1()
      

  8.   

      你提示了我...
      BN_CLICKED  是WM_LBUTTONDWON WM_LBUTTONUP 消息的组成我在 BN_CLICKED 的响应函数中 写入MessageBox  和在WM_LBUTTONDOWN 的响应函数中写入MessageBox应该是一样的把 ?  不理解 
      
      

  9.   

    貌似按钮的消息只有click和doubleclick两个吧?对应的消息也只有这两个吧?
      

  10.   


    按钮也是一个小window 应该所有的消息都有的...
      

  11.   


    应该是BM_CLICKED这个消息,而BN_CLICKED是按钮的父窗口响应。
    Simulates the user clicking a button. This message causes the button to receive the WM_LBUTTONDOWN and WM_LBUTTONUP messages, and the button's parent window to receive a BN_CLICKED notification message.
      

  12.   


    查看了msdn 确实如此,但是我用vs2008 中只有BN_CLICKED消息  添加相应后  也确实解决了这个问题,那么现在更加迷惑了..
    问题:1、BN_CLICKED 是父类相应的吗? 怎么在子类中也可以添加该消息响应函数?
          2、为什么在WM_LBUTTONDOWN消息中添加MessageBox函数后,父类也会执行子类的WM_LBUTTONDOWN消息响应函数?
      

  13.   

    // CButton::OnLButtonDown(nFlags, point); 注释掉