Formview上放置了多个Button控件,为了响应Button对右键的处理,采用了子类化的方法,生成了自己的一个新类,就是在Button的基础上添加了一个处理右键的消息函数。
   我的右键事件为弹出一个菜单。   问题是我如何知道弹出菜单时是那个Button函数的右键消息导致的??  求教 

解决方案 »

  1.   

    lResult = SendMessage(      // returns LRESULT in lResult     
    (HWND) hWndControl,      // handle to destination control     
    (UINT) WM_NOTIFY,      // message ID     
    (WPARAM) wParam,      // = (WPARAM) (int) idCtrl;    
    (LPARAM) lParam      // = (LPARAM) (LPNMHDR) pnmh; 
    );  (int) idCtrl这个是自窗口ID
    pnmh是结构体
    typedef struct tagNMHDR {
        HWND hwndFrom;
        UINT idFrom;
        UINT code;
    } NMHDR;
      

  2.   

    可能是我没说明白
    我为了响应右键消息做了个很简单的工作
    /////.h文件class CMyButton : public CButton  
    {
    public:
    CMyButton();
    virtual ~CMyButton();protected: //{{AFX_MSG(CMyButton) 

         afx_msg void OnRButtonDown(UINT nFlags, CPoint point); 

    //}}AFX_MSG 

    DECLARE_MESSAGE_MAP()
    };也就是添加了一个右键单击响应函数//////.cpp文件CMyButton::CMyButton()
    {}CMyButton::~CMyButton()
    {}
    BEGIN_MESSAGE_MAP(CMyButton, CButton)
        
        //{{AFX_MSG_MAP(CMyButton)  ON_WM_RBUTTONDOWN() 

    //}}AFX_MSG_MAP END_MESSAGE_MAP() void CMyButton::OnRButtonDown(UINT nFlags,CPoint poin)
    {
    if(nFlags & MK_RBUTTON)
    MessageBox("OK");
    }在VIEW的.h中声明了一个m_btn数组,CMyButton m_btn[12]
    在OnInitialUpdate中添加了下面的代码
    for(i=0;i<12;i++)
    {
    m_btn[i].SubclassDlgItem(IDC_BUTTON_PSN1+i,this);
    }现在每个btton的右键都能弹出 “OK”,我想在弹出OK之前知道是触发了哪个按钮的右键事件,
      

  3.   

    你不要弹出OK,弹出this指针值,按钮句柄值,按钮ID等就能分辨了
      

  4.   

    直接弹出this指针?此处的this就是按钮类么?按钮句柄可以通过this指针获得么??不好意思,很少作界面的东西,麻烦说清楚点
      

  5.   

    每次响应的时候,this指针都是指向Button的实例。可以得到该句柄,按钮ID。