看了很多帖子,都说要重载,可是我重载了CMybutton,也添加了消息映射,还是不知道怎么用,因为不知道怎么和我对话框理的按钮关联起来,
希望哪位好人告诉我具体实现方法,最好有例子,谢谢了

解决方案 »

  1.   

    不用派生类,重载对话框的PreTranslateMessage函数来判断发给按钮的WM_LBUTTONDOWN消息。
      

  2.   

    这个确实要重载的。在你自定义的BUTTON中,响应LBUTTONDOWN事件。在其中处理你要做的事情。
    然后你对话框上的按钮就用你的BUTTON就行了
      

  3.   

    cnzdgs 的方法简单可行。另外重载也不错:在你自定义的BUTTON中,响应LBUTTONDOWN事件发送消息到按钮的父窗口,在父窗体中响应消息就可以了!代码如下
    #define BN_LBUTTONDOWN 10  //按钮按下
    #define BN_LBUTTONUP   11  //弹起#define ON_BN_LBUTTONDOWN(id, memberFxn) ON_CONTROL(BN_LBUTTONDOWN,id, memberFxn)  //消息处理宏
    #define ON_BN_LBUTTONUP(id, memberFxn) ON_CONTROL(BN_LBUTTONUP,id, memberFxn)      //消息处理宏
    //鼠标按下时的消息
    void CPushButton::OnLButtonDown(UINT nFlags, CPoint point)
    {
    HWND hwParent = GetParent()->m_hWnd;  
    UINT uID = GetDlgCtrlID(); 
    ::SendMessage(hwParent,WM_COMMAND,MAKEWPARAM(uID,BN_LBUTTONDOWN), (LPARAM)m_hWnd); //发送给父窗口 CButton::OnLButtonDown(nFlags, point);
    }
    //父窗口
    BEGIN_MESSAGE_MAP(CControlDlg, CDialog)                     //加入消息处理
         ON_BN_LBUTTONDOWN(IDC_BUTTON_DOWN, &CControlDlg::OnBnDownButtonDown)
        ON_BN_LBUTTONUP(IDC_BUTTON_DOWN, &CControlDlg::OnBnUpButtonDown)
    END_MESSAGE_MAP()
      

  4.   

    cnzdgs 的方法应该是最简单的,下面我把这种方法实现一下。
    PreTranslateMessage函数中,在TODO后面加入下代码:
    if(pMsg->hwnd == YourBtnWnd && pMsg->message == WM_LBUTTONDOWN)
    {
    //你可以写你的鼠标左键向下的消息响应了
    return 1;
    }
      

  5.   

    貌似没这么复杂呀!
    直接在对话框里处理按钮的WM_LBUTTONDOWN消息就可以了呀!
    LZ是有其他的想法吗?
      

  6.   

    <<mfc windows程序设计>>这本书不错