我们有时候我动态创建一个按钮,同时要加上响应函数。主要是由几个步骤完成的。
1.在类中创建一个按钮成员。CButtion m_btn;
2.在适当的位置(你自己安排)创建这个控件
- m_btn.Create("new",/按钮上显示的文本
- BS_DEFPUSHBUTTON|WS_VISIBLE|WS_CHILD,///如果没有制定WS_VISIBLE还要调用ShowWindow将其显示出来
- CRect(0,0,100,100),/左上角的坐标(0,0),长度为100,100
- this,//父窗口
- 123);
3.在MESSAGEMAP中加入响应的响应函数,ON_BTN_CLIKED(ID,pfun) ID为123,我们创建的时候定义的ID号为准。
4.在头文件中来写消息响应函数的声明,afx_msg viod pfun();
5.在cpp文件中实现void pfun()
通过以上几个步骤我们就能完成一个动态按钮的创建和添加他的消息响应函数。其实和我们静态的拖控件的方法一样。另外可以参看以下链接
http://blog.163.com/up_tlx/blog/static/206022202201241992431218/
注意事项:ID不要和别的资源ID 重了。第二要写对按钮创建的属性。写明父窗口是什么 ,通常是this。
以下是别人写的
在mfc中动态创建按钮
第一步:
在Resource.h中,添加按钮ID:ID_BTN_TEMP = 1001
第二步:
在View类【CView的子类】中添加一个变量,判断按钮是否已经创建:
bool m_bIsCreatButton;
第三步:
创建一个按钮数组:
CBitmapButton *m_bitList[11]
第四步:
在View类【CView的子类】的构造函数中,初始化bIsCreatButton:
m_bIsCreatButton = false;
第五步:
在View类【CView的子类】中添加函数创建按钮:
CBitmapButton* CHisNavView::CreateButton(int nID, char* text,int left, int top, int right, int bottom)
{
CRect rect;
GetClientRect(rect);
CBitmapButton *pButton = new CBitmapButton();
ASSERT_VALID(pButton); pButton->Create(TEXT(text),
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
CRect(left, top, right, bottom),
this, nID);
return pButton;
}
其中,nID为按钮ID,text为按钮文本。 其他为按钮显示范围。
第六步:
在View类【CView的子类】的OnDraw方法中创建按钮:
m_bitList[0] = CreateButton(ID_BTN_TEMP, "天志的按钮", 50, 50, 150, 80);
第六步:
在View类【CView的子类】中声明函数:
afx_msg void OnTest()
第七步:
在View类【CView的子类】的BEGIN_MESSAGE_MAP(CHisNavView, CView)添加:
ON_BN_CLICKED(ID_BTN_TEMP, CHisNavView::OnTest)
第八步:实现OnTest()函数
void CHisNavView::OnTest()
{
MessageBox(TEXT("天志自己写着玩!"), NULL, MB_OK);
}
在Resource.h中,添加按钮ID:ID_BTN_TEMP = 1001
第二步:
在View类【CView的子类】中添加一个变量,判断按钮是否已经创建:
bool m_bIsCreatButton;
第三步:
创建一个按钮数组:
CBitmapButton *m_bitList[11]
第四步:
在View类【CView的子类】的构造函数中,初始化bIsCreatButton:
m_bIsCreatButton = false;
第五步:
在View类【CView的子类】中添加函数创建按钮:
CBitmapButton* CHisNavView::CreateButton(int nID, char* text,int left, int top, int right, int bottom)
{
CRect rect;
GetClientRect(rect);
CBitmapButton *pButton = new CBitmapButton();
ASSERT_VALID(pButton); pButton->Create(TEXT(text),
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
CRect(left, top, right, bottom),
this, nID);
return pButton;
}
其中,nID为按钮ID,text为按钮文本。 其他为按钮显示范围。
第六步:
在View类【CView的子类】的OnDraw方法中创建按钮:
m_bitList[0] = CreateButton(ID_BTN_TEMP, "天志的按钮", 50, 50, 150, 80);
第六步:
在View类【CView的子类】中声明函数:
afx_msg void OnTest()
第七步:
在View类【CView的子类】的BEGIN_MESSAGE_MAP(CHisNavView, CView)添加:
ON_BN_CLICKED(ID_BTN_TEMP, CHisNavView::OnTest)
第八步:实现OnTest()函数
void CHisNavView::OnTest()
{
MessageBox(TEXT("天志自己写着玩!"), NULL, MB_OK);
}