请问如何动态创建按钮?

linxiao 2002-01-21 02:52:00
myButton1.Create(_T("My button"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, CRect(10,10,100,30), this, 1);我把这条语句写在对话框的::OnInitDialog()中,但是按钮出不来
...全文
1450 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
linxiao 2002-01-21
  • 打赏
  • 举报
回复
我按照jiangping_zhu(娜可露露之风之刃)的方法做了,解决问题了。谢谢大家的热心!
linxiao 2002-01-21
  • 打赏
  • 举报
回复
我按照jiangping_zhu(娜可露露之风之刃)的方法做了。还是感谢大家的热心
bzshow 2002-01-21
  • 打赏
  • 举报
回复
http://www.vckbase.com/vckbase/vckbase11/vc/ctrls/edt_03/1103001.htm



如何用代码动态添加控件
作者:bzshow

读者层次: VC初学者

在资源编辑器里我们可以方便地在对话框中加入所需控件,比如文本编辑框、列表控件等。但假如我们需要在运行期间动态生成这些控件该怎么做呢?本文就是讲述用代码动态添加控件的方法,并提供示例工程。

下载示例工程 12.5K

程序运行界面如下


为了方便演示,我们先生成一个基于对话框的MFC工程,起名为My

在CMyDlg.h中做下面几个步骤:


public:
//加上这个变量
CEdit m_MyEdit;
protected:
//加上这个函数, 用来响应编辑框改变的事件
afx_msg void OnChangeEdit();

在CMyDlg.cpp中做下面几个动作:


//增加这一行,为该编辑框设定ID为1820
#define ID_MYEDT 1820
在BEGIN_MESSAGE_MAP(CMyDlg, CDialog)下面加入
ON_EN_CHANGE(ID_MYEDT, OnChangeEdit)

添加这一句的作用是将编辑控件内容改变的消息映射到OnChangeEdit函数,你要在CMyDlg.cpp中实现OnChangeEdit()函数;


好了,让我们动态生成控件吧! m_MyEdit.CreateEx(WS_EX_CLIENTEDGE, // 3D-border外观
_T("EDIT"),
NULL,
ES_AUTOHSCROLL | ES_LEFT | ES_NOHIDESEL | WS_CHILD,
rect, this,
ID_MYEDT);//生成edit控件

m_MyEdit.ShowWindow(SW_SHOW); //显示控件
m_MyEdit.SetFocus(); //设置焦点

//动态删除可以用如下语句
GetDlgItem(ID_MYEDT)->DestroyWindow();//销毁控件


老海小舟 2002-01-21
  • 打赏
  • 举报
回复
不好意思 贴上的| 线出了问题 呵呵 系统改成了 & 呵呵 没问题了
老海小舟 2002-01-21
  • 打赏
  • 举报
回复
不会呀 我测试了 你的句子就是 CRect 的问题 改成 CRect(10,10,100,100)就没问题了
没有问题 因为我也试过了
myButton1.Create(_T("My button"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, CRect(10,10,100,130), this, 1);
  • 打赏
  • 举报
回复
最好做成类的成员变量,不要使用临时变量,否则函数结束将会释放掉的。
linxiao 2002-01-21
  • 打赏
  • 举报
回复
各位兄弟的方法我刚才试了一下,还是不行
bzshow 2002-01-21
  • 打赏
  • 举报
回复
ShowWindow(SW_SHOW);
ydogg 2002-01-21
  • 打赏
  • 举报
回复
ShowWindow(SW_SHOW);
老海小舟 2002-01-21
  • 打赏
  • 举报
回复
是你的CRect的问题 改成CRect(10,10,100,100)
myButton1.Create(_T("My button"), WS_CHILD¦WS_VISIBLE¦BS_PUSHBUTTON, CRect(10,10,100,130), this, 1);
在OnInitDialog()返回前添加
idAnts 2002-01-21
  • 打赏
  • 举报
回复
你试试用其它方式触发建按钮,比如点击某按钮,然后再建按钮,肯定行了。其实就是等你的对话框建好之后建就可以了。
老海小舟 2002-01-21
  • 打赏
  • 举报
回复
不会呀 ,怎么会不行呢!
idAnts 2002-01-21
  • 打赏
  • 举报
回复
OnInitDialog()的时候你的对话框还没有建好,当然出不来了。

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧