使用CB的技巧来解决VC中动态绑定事件
首先声明一下,我对VC不是很熟,我有一个同事在用VC的时候发现动态创建的按钮不容易处理它的事件(譬如Click),他创建了好几个按钮,但是要处理他们的单击事件的时候很麻烦,要建好几个相对应的函数。
我是用CB的,在CB中的事件绑定是很容易的一件事,只要预先创建一个MyClick (TObject *Sender)的函数,然后Button->OnClick=MyClick:便可以了,即使是很多的按钮,都可以通过这个方法来用这个函数处理,在函数中把Sender强制转化为TButton类型便可以作相应的处理。
把上面的做法运用到VC中,我想也是可以的。
首先继承CButton类(CMyButton),在头文件中申明typedef void (*CMyClick)(int ID);//这里面的参数根据不同的情况来设置。
在类中定义一个公有的成员变量
public:
CMyClick m_MyClick;
int m_ID;//这个是用来记录按钮的唯一标志
然后处理这个类的原有的OnClick事件,在函数中这样写
void OnClicked()
{
if(m_MyClick)
m_MyClick (m_ID);
}
这样一切OK了
在你的程序中首先创建一个函数(不能是类的成员函数)
void __cdecl MyClick(int ID)
{
//做你想做的事情
AfxMessageBox(“你点击了按钮了”);
}
//动态创建,动态绑定
for(int i=0;i<ButtonCount;i++)
{
CMyButton tButton;
.....
tButton.m_ID=i;
tButton.m_MyClick=MyClick;
...
}
//下面是CmyButton类
typedef void (*CMyClick)(int ID);
class CMyButton : public CButton
{
// Construction
public:
CMyButton();
// Attributes
public:
CMyClick m_MyClick;
int m_ID;//这个是用来记录按钮的唯一标志
// 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 OnClicked();
//}}AFX_MSG
}