MFC 对话框怎么才能动态创建按钮,求助!

 我来答
水晶扇
2012-07-06 · TA获得超过1536个赞
知道大有可为答主
回答量:837
采纳率:100%
帮助的人:1105万
展开全部
方法一:先隐藏在显示。
方法二:用CButton类,创建对象,然后Create,然后Show就可以了
追问
那又怎样为这个按钮添加相应函数呢?
追答

先隐藏再显示的,和直接显示的一样。

后面通过代码添加的:

自己设计一个类,CMyButton: public CButton

可以继承CButton类的函数。

消息响应可以直接在

MESSAGE_MAP

里面直接添加

------------------------------------------------

方法三:

CRect rect;

 RECT rtBtn;

 GetClientRect(&rect);

 rtBtn.left= rect.left + 10;

 rtBtn.top= rect.top + 10;

 rtBtn.right = rtBtn.left+50;

 rtBtn.bottom = rtBtn.top+30;

 m_bt1.Create("按钮1",WS_VISIBLE,rtBtn,this,IDC_MY_BUTTON_START);

 rtBtn.left+=60;

 rtBtn.right = rtBtn.left+50;

 rtBtn.bottom = rtBtn.top+30;

 m_bt2.Create("按钮2",WS_VISIBLE,rtBtn,this,IDC_MY_BUTTON_START+1);

 

 

这是创建代码,在resource.h中添加两个变量:


#define IDC_MY_BUTTON_START  10000

#define IDC_MY_BUTTON_END  20000

 

这样你就可以创建10000个按钮了

 

可以为新增的类CMyButton的所有对象都设置同一个消息响应函数:

在CMyButton类(类选项卡)中右击,选择“Add Windows Message Handler”,选择“=BN_CLICK”,这样就为按钮按下事件定义了一个统一的函数(OnClick,可以改,随便)。

然后在OnClick函数中加入以下语句:

int id = GetDlgCtrlID();

 ((CTryAddBtnDlg*)GetParent())->OnAddedButton(id);

这样Dialog(就是Parent类,创建Button对象的类)对象就能知道具体是哪一个按钮被按下;

在dialog类的OnAddedButton函数中:


void CTryAddBtnDlg::OnAddedButton(int id)

{

 switch(id)

 {

  case IDC_MY_BUTTON_START:

   MessageBox("按钮1 Click!");

   break;

...

}}

这样就可以了。

这样可以Create任意个按钮,而且每个按钮可以执行不同的操作。

 

我已经试验过了。

有什么不明白的可以继续追问。

你可以留下邮箱,我把我的示例程序发给你。

---------------------------------------------

够尽职尽责吧?包你会,要加分哦。

AIR_IT
2012-07-06 · TA获得超过183个赞
知道答主
回答量:277
采纳率:100%
帮助的人:162万
展开全部
Create Show
不可以动态给这个按钮添加响应函数,那不成动态语言了吗?C++是静态语言。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式