to all:     除了下面这种方法外
     下面所说基于对话框:   
  在对话框里加一个按钮   IDC_B1   
  在CXXXDlg.h   里重载   PreTranslateMessage(MSG*pMsg)     (即声明:BOOL   PreTranslateMessage(MSG*   pMsg);)     //   XXX   你的工程名   
    
  接着在CXXXDlg.cpp   里加上如下实现:   
  BOOL   CXXXDlg::PreTranslateMessage(MSG*   pMsg)     
  {   
  //   TODO:   Add   your   specialized   code   here   and/or   call   the   base   class   
  if(pMsg->message==WM_RBUTTONUP)//   可改为任意其它消息   
  {   
  CRect   r;   
  ::GetWindowRect(GetDlgItem(IDC_B1)->m_hWnd,&r);//   得到按钮控件的   rect   
  if(r.PtInRect(pMsg->pt))           //   检测鼠标动作是否在按钮内   
  AfxMessageBox("左键按了一下");   
我有很多的按钮都需要添加右键事件,不想用上面的感觉很不好...希望大家给个建议
  }   
  return   CDialog::PreTranslateMessage(pMsg);   
  }   

解决方案 »

  1.   

    声明一个CMyButton类,派生于CButton类,重载该类的OnRButtonDown函数
    class CRButton : public CButton
    {
    .....
         afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
    .....
    }
    在你的CXXXDlg中定义一个CRButton *m_rButton;当创建该按钮时调用m_rButton->Create(),
    大致就是这样
      

  2.   

    ??在刚新建的类CRButton类中重载右键事件就可以了呀,当你调用m_rButton-> Create()时创建的按钮的类型是CRButton,所以你在按钮上右击就会调用CRButton类的OnRButtonDown函数
      

  3.   

    能不能给我做个DOME的例子呀
    或者加我的QQ79224601
      

  4.   

    else if( WM_RBUTTONDOWN == pMsg->message )
    {
    CWnd * pWnd = FromHandle( pMsg->hwnd );
    int id = pWnd->GetDlgCtrlID(); if( id >= IDC_BUTTON3001 && id <= IDC_BUTTON3012 )
    {
    CMenu menu;
    menu.LoadMenu( IDR_ADDTO_RECENT );
    menu.GetSubMenu( 0 )->TrackPopupMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON, pMsg->pt.x, pMsg->pt.y, this );
    memset( m_button_captions, 0, sizeof( m_button_captions ) );
    pWnd->GetWindowText( m_button_captions, sizeof( m_button_captions ) );
    m_current_index = g____mathfun_level2 * MATHFUN_LEVEL2 + id - IDC_BUTTON3001;
    }
    else if( id >= IDC_RECENT_0001 && id <= IDC_RECENT_0014 )
    {
    //CMenu::TrackPopupMenu();
    CMenu menu;
    menu.LoadMenu( IDR_REMOVEFROM_RECENT );
    menu.GetSubMenu( 0 )->TrackPopupMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON, pMsg->pt.x, pMsg->pt.y, this );
    m_current_index = id - IDC_RECENT_0001;
    }
    }