我通过Cbutton派生了一个CMyButton,然后在单击事件里写了弹出一个消息框。
现在的问题是,在点过按钮后弹出一次消息框后,点窗口的任何一个地方,都会弹出消息框。
用tab切换掉焦点后就好了……这是什么原因呢?void CMyButton::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
::MessageBox (m_hWnd,_T("lbdown"),_T("down"),64);
CButton::OnLButtonDown(nFlags, point);
}

解决方案 »

  1.   

     ::MessageBox (m_hWnd,_T("lbdown"),_T("down"),64);把第一个参数改为NULL看看MSDN上面写了,不让用字窗体的句柄做参数。ResIf you create a message box while a dialog box is present, use the handle of the dialog box as the hWnd parameter. The hWnd parameter should not identify a child window, such as a control in a dialog box.
      

  2.   

    还是问题依然,我上传了代码,有空能帮看看么?
    http://download.csdn.net/detail/wangzexi/4610750
      

  3.   

    void CMyButton::OnLButtonDown(UINT nFlags, CPoint point)
    {
        // TODO: 在此添加消息处理程序代码和/或调用默认值
        ::MessageBox (m_hWnd,_T("lbdown"),_T("down"),64);
        //CButton::OnLButtonDown(nFlags, point);
    }
      

  4.   

    因焦点在你的按钮上,所以点击事件先到你的按钮OnLButtonDown事件中。
      

  5.   

    void CMyButton::OnLButtonDown(UINT nFlags, CPoint point)
    {
      CButton::OnLButtonDown(nFlags, point);
      ReleaseCapture();//释放鼠标,非常重要
      ::MessageBox (m_hWnd,_T("lbdown"),_T("down"),64);
    }
      

  6.   

    解决了,按照三楼和五楼的方法都可以解决。五楼去掉ReleaseCapture()也正常,
    说明问题出在CButton::OnLButtonDown(nFlags, point)现在知其然了,但不知其所以然,期待高人解答~