动态生成100个按钮 为他们添加消息响应 如题,动态生成了100多个按钮,现在想要为他们添加右键响应:动态关联事件的方法? 一个一个的添加事件响应到MessageMap好麻烦。。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 afx_msg void OnButtonClick(UINT nID);ON_CONTROL_RANGE(BN_CLICKED, IDC_BUTTON_1, IDC_BUTTON_100, OnButtonClick) 重写CButton类,你所有的Button都是用该类的对象 OnContextMenu 这个事件函数里处理 没懂现在我自己写一个类CMyButton继承自CButton动态生成了100个CMyButton要在MyBtn[100]上每一个btn关联一个右键响应函数:在类中要怎么添加函数 给你看一篇文章,希望有帮助:://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;} 1楼已经说的很好了,楼主只需要在增加按钮使用循环将按钮的ID依次赋值为IDC_BUTTON_1到IDC_BUTTON_100即可 给CMyBuffton添加消息响应函数,vc6的话在类视图中选中那个类,然后右键,选择add message handler,里面选择wm_rbuttondown或者wm_rbuttonup,vs的话应该是在属性窗口中添加的 你在你的CMyButton类中添加处理WM_RBUTTONDOWN消息 动态生成按钮时,指定按钮的ID,然后处理 OnCommand(WPARAM wParam, LPARAM lParam)switch(wParam){case id_mybutton1:case id_mybutton2:...} 这个不错 还有个方法:CMyButton中加个变量int btnflag;CMyButton button1=new...button1.btnflag=1;其他按钮类似然后在CMyButton右键按下函数中判断 btnflag的值就知道是哪个按钮了btnflag=1->button1... 按照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_MAPEND_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也定义过 就是这样的啊。一个响应函数里处理100个button的事件,根据不同的id处理不同的事情啊。 一加上这一句就出现错误了。。 ON_CONTROL_RANGE(BN_CLICKED, IDC_BUTTON_1, IDC_BUTTON_100, OnButtonClick) 谢谢大家,已解决,OnButtonClick这个函数写错了一点~~有个小疑问: BT_CLICKED是响应的鼠标左键,鼠标右键对应的消息是?? 关于SOCKET的数据发送的,求帮助 多媒体定时器定时不准 一个奇怪的问题。 如何把TabCtrl控件的标签(按钮)放在下边,就像VC6 中左边的Workspace一样 高分求解...跨进程操作CRichEditCtrl的问题. 如何改变com组件的classid? 我是一个初学者 请问如何使CEditView 的内容清空? 用C++开发COM,包含<math.h>头文件,Release编译时,link出错。 痛苦的求教 linux下关于库冲突的问题该怎么解决呢。 在C++工程里面可以 ,移植到MFC界面里面报错,求解决!
现在我自己写一个类CMyButton继承自CButton
动态生成了100个CMyButton
要在MyBtn[100]上每一个btn关联一个右键响应函数:
在类中要怎么添加函数
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;
}
1楼已经说的很好了,楼主只需要在增加按钮使用循环将按钮的ID依次赋值为IDC_BUTTON_1到IDC_BUTTON_100即可
动态生成按钮时,指定按钮的ID,然后处理 OnCommand(WPARAM wParam, LPARAM lParam)switch(wParam)
{
case id_mybutton1:
case id_mybutton2:
...
}
button1.btnflag=1;
其他按钮类似然后在CMyButton右键按下函数中判断 btnflag的值就知道是哪个按钮了
btnflag=1->button1...
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也定义过
ON_CONTROL_RANGE(BN_CLICKED, IDC_BUTTON_1, IDC_BUTTON_100, OnButtonClick)
有个小疑问: BT_CLICKED是响应的鼠标左键,鼠标右键对应的消息是??