永发信息网

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

答案:2  悬赏:0  手机版
解决时间 2021-12-03 06:48
MFC 对话框怎么才能动态创建按钮,求助!
最佳答案
方法一:先隐藏在显示。
方法二:用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任意个按钮,而且每个按钮可以执行不同的操作。

 
我已经试验过了。
有什么不明白的可以继续追问。
你可以留下邮箱,我把我的示例程序发给你。
---------------------------------------------
够尽职尽责吧?包你会,要加分哦。
全部回答
Create Show
不可以动态给这个按钮添加响应函数,那不成动态语言了吗?C++是静态语言。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
乌龟缸水太浑浊了,3天换一次水,有没有大神
你的上司有一个不好的甚至是错误的决定让你执
我2015年考得护资,今年还可以注册吗?
林内暖气片好用吗?有什么优点?
米旗地址在哪,我要去那里办事
洪浪北地铁站怎样坐地铁到三诺智慧大厦
遵义社保网站是多少
mybatis框架是自动释放数据库连接吗
吃生葵花籽有什么好处
用diskgeniiud对新硬盘分区怎样设置
苹果手机4的上市乔布斯怎么介绍
miorwo,英译汉是什么意思
钲圣恒五金建材公司地址在什么地方,想过去办
麦芽贷是啥东西?
廉江市公安如何作为?
推荐资讯
小丽在欣赏节日彩灯时发现,这些小彩灯嗾使串
对就是这样的英文
如何委婉的告诉对方「我有男朋友了」?
下列词语中的划线字,读音全都正确的一组是A.
钫与水会发生怎样的反应
宝宝能长期吃清清宝吗
青阳离南京远不远
介休一大同浑源坐火车,怎么走
审判天使皮肤分别是多少钱?
流通股本五亿多 解禁股8亿多 解禁后是不是流
坊的多音字组词和拼音
单选题“奏章票拟,主之内阁:军国机要,主之
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?