MFC 对话框怎么才能动态创建按钮,求助!
答案:2 悬赏:0 手机版
解决时间 2021-12-03 06:48
- 提问者网友:爱了却不能说
- 2021-12-02 19:59
MFC 对话框怎么才能动态创建按钮,求助!
最佳答案
- 五星知识达人网友:深街酒徒
- 2021-12-02 20:36
方法一:先隐藏在显示。
方法二:用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任意个按钮,而且每个按钮可以执行不同的操作。
我已经试验过了。
有什么不明白的可以继续追问。
你可以留下邮箱,我把我的示例程序发给你。
---------------------------------------------
够尽职尽责吧?包你会,要加分哦。
方法二:用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任意个按钮,而且每个按钮可以执行不同的操作。
我已经试验过了。
有什么不明白的可以继续追问。
你可以留下邮箱,我把我的示例程序发给你。
---------------------------------------------
够尽职尽责吧?包你会,要加分哦。
全部回答
- 1楼网友:北方的南先生
- 2021-12-02 21:30
Create Show
不可以动态给这个按钮添加响应函数,那不成动态语言了吗?C++是静态语言。
不可以动态给这个按钮添加响应函数,那不成动态语言了吗?C++是静态语言。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯