MFC does not allow to trap all the events on the CButton control but some commonly used events like BN_CLICKED and BN_DOUBLECLICKED and so to trap a right mouse button events on a CButton MFC you need to derive a new class from the CButton.
MyButton.h
MyButton.cpp
Now in your Dialog class you need to trap the Message that your CMyButton passes. The message passed is NM_RCLICK and you capture it as
Your member function must be declared with the following prototype:
afx_msg void memberFxn( NMHDR * pNotifyStruct, LRESULT * result );
afx_msg void OnRClicked( NMHDR * pNotifyStruct, LRESULT * result )
MyButton.h
Code: CPP
class CMyButton : public CButton
{
// Construction
public:
CMyButton();
// Attributes
public:
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CMyButton)
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CMyButton();
// Generated message map functions
protected:
//{{AFX_MSG(CMyButton)
afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
Code: CPP
BEGIN_MESSAGE_MAP(CMyButton, CButton)
//{{AFX_MSG_MAP(CMyButton)
ON_WM_RBUTTONUP()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMyButton message handlers
void CMyButton::OnRButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
NMHDR hdr;
hdr.code = NM_RCLICK;
hdr.hwndFrom = this->GetSafeHwnd();
hdr.idFrom = GetDlgCtrlID();
TRACE("OnRButtonUp");
this->GetParent()->SendMessage(WM_NOTIFY, (WPARAM)hdr.idFrom, (LPARAM)&hdr);
}
Code:
ON_NOTIFY(NM_RCLICK, IDC_BUTTON1, OnRClicked) ON_NOTIFY(NM_RCLICK, IDC_BUTTON2, OnRClicked)
afx_msg void memberFxn( NMHDR * pNotifyStruct, LRESULT * result );
afx_msg void OnRClicked( NMHDR * pNotifyStruct, LRESULT * result )

