永发信息网

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任意个按钮,而且每个按钮可以执行不同的操作。

 
我已经试验过了。
有什么不明白的可以继续追问。
你可以留下邮箱,我把我的示例程序发给你。
---------------------------------------------
够尽职尽责吧?包你会,要加分哦。
全部回答
  • 1楼网友:北方的南先生
  • 2021-12-02 21:30
Create Show
不可以动态给这个按钮添加响应函数,那不成动态语言了吗?C++是静态语言。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯