如题,动态生成了100多个按钮,现在想要为他们添加右键响应:
动态关联事件的方法? 一个一个的添加事件响应到MessageMap好麻烦。。

解决方案 »

  1.   

    afx_msg void OnButtonClick(UINT nID);ON_CONTROL_RANGE(BN_CLICKED, IDC_BUTTON_1, IDC_BUTTON_100, OnButtonClick)
      

  2.   

    重写CButton类,你所有的Button都是用该类的对象
      

  3.   

    OnContextMenu 这个事件函数里处理
      

  4.   

    没懂
    现在我自己写一个类CMyButton继承自CButton
    动态生成了100个CMyButton
    要在MyBtn[100]上每一个btn关联一个右键响应函数:
    在类中要怎么添加函数
      

  5.   

    给你看一篇文章,希望有帮助:://Radio按扭组的使用首先我们要完成一个功能,在一个添加新用户的场景里,通过Radio按钮来判断用户选择的是管理员还是普通用户。 要使用Radio组的功能首先我们必须作如下设置: 1、2个Radio按钮的ID号不同,但是他们的tab顺序必须是按顺序排列的,这些都可以在Resource.h文件里面查看到。      如:Radio1  ID:IDC_RADIO_ADMIN            Radio2  ID:IDC_RADIO_USER       在Resource.h文件里我们可能会看到:      #define IDC_RADIO_ADMIN      1001      #define IDC_RADIO_USER        1002 2、设置第一个Radio按钮属性里面的Group为true,那么Radio1和Radio2就成为一组了,如果还有Radio3和Radio4,若把Radio3的        Group设置为true,那么Radio3和Radio4就成为一组了。 好了,需要做的设置都做好了,那么接下来,该怎么去应用呢? 为了捕获到用户对这个Radio按钮组的事件,那么我们就需要在跟这个组相关联的类里面添加消息(手动添加)。 在添加消息之前,为了区分用户到底选择的是哪一个按钮,我们可以在相关联的对话框类里面添加一个枚举变量。 public:                enum {Admin, User} m_nUserType;  现在我们就添加消息处理 1、在类的头文件里面添加:afx_msg void OnBnClickedRadio(UINT idCtl);2、BEGIN_MESSAGE_MAP和END_MESSAGE_MAP()之间添加
                  ON_CONTROL_RANGE(BN_CLICKED, IDC_RADIO_ADMIN, IDC_RADIO_USER, OnBnClickedRadio)ON_CONTROL_RANGE这个宏需要4个参数:      1、事件的类型:如这里的单击事件      2、按钮组的第一个按钮(标识开始)      3、按钮组的最后一个按钮(标识结束)      4、事件响应的函数 3、到类的实现文件(cpp)里面添加这个函数void CDlgXXX::OnBnClickedRadio(UINT idCtl)
    {
        if(idCtl == IDC_RADIO_ADMIN)
            m_nUserType = Admin;
        if(idCtl == IDC_RADIO_USER)
            m_nUserType = User;
    }
      

  6.   


    1楼已经说的很好了,楼主只需要在增加按钮使用循环将按钮的ID依次赋值为IDC_BUTTON_1到IDC_BUTTON_100即可
      

  7.   

    给CMyBuffton添加消息响应函数,vc6的话在类视图中选中那个类,然后右键,选择add message handler,里面选择wm_rbuttondown或者wm_rbuttonup,vs的话应该是在属性窗口中添加的
      

  8.   

    你在你的CMyButton类中添加处理WM_RBUTTONDOWN消息
      

  9.   


    动态生成按钮时,指定按钮的ID,然后处理 OnCommand(WPARAM wParam, LPARAM lParam)switch(wParam)
    {
    case id_mybutton1:
    case id_mybutton2:
    ...
    }
      

  10.   

    这个不错 还有个方法:CMyButton中加个变量int btnflag;CMyButton button1=new...
    button1.btnflag=1;
    其他按钮类似然后在CMyButton右键按下函数中判断 btnflag的值就知道是哪个按钮了
    btnflag=1->button1...
      

  11.   

    按照1楼和12楼的说法,添加了10个按钮
    On_CONTROL_RANGE()函数应该添加到BeginMessageMap里面?
    BEGIN_MESSAGE_MAP(CWUGUANGDlg, CDialog)
    //{{AFX_MSG_MAP(CWUGUANGDlg) ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_WM_CREATE()
    ON_WM_DESTROY()
    ON_COMMAND(IDM_CHANGESKIN, OnChangeskin)
    ON_COMMAND(IDM_SET_LAYER, OnSetLayer)
    ON_WM_RBUTTONDOWN()
    ON_WM_TIMER()
            ON_CONTROL_RANGE(BN_CLICKED, IDC_BUTTON_1, IDC_BUTTON_100, OnButtonClick)         //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
             添加这一句之后提示出错: error C2059: syntax error : ';'
    : error C2143: syntax error : missing ';' before ','
     : error C2143: syntax error : missing ';' before ','
     : error C2143: syntax error : missing ';' before '}'
     : error C2143: syntax error : missing ';' before '}'
     : error C2143: syntax error : missing ';' before '{'
    但是IDC_BUTTON_1 到IDC_BUTTON_10都是定义了的,OnButtonClick也定义过
      

  12.   

    就是这样的啊。一个响应函数里处理100个button的事件,根据不同的id处理不同的事情啊。
      

  13.   

    一加上这一句就出现错误了。。
      ON_CONTROL_RANGE(BN_CLICKED, IDC_BUTTON_1, IDC_BUTTON_100, OnButtonClick)   
      

  14.   

    谢谢大家,已解决,OnButtonClick这个函数写错了一点~~
    有个小疑问: BT_CLICKED是响应的鼠标左键,鼠标右键对应的消息是??