控件的学习(二)--动态创建按钮之后把它关联变量

我们知道如果在资源视图中添加了某个控件之后,如果想把它关联一个变量的话,可以使用类向导中来添加关联变量,但是动态创建的按钮如何让其关联变量呢?

刚开始我想自己首先在资源框里手动添加一个编辑框,然后关联一个变量,看代码哪里改变了,其实在孙鑫的VC++里面提到了,就是在做数据交换的DoDataExchange函数里面添加 DDX_Text(pDX,控件ID,关联的变量)

比如把IDC_EDIT1关联num1

   //{{AFX_DATA_MAP(C动态创建的控件关联变量Dlg)    //注意在这里添加上两个注释宏
DDX_Text(pDX,IDC_EDIT1,num1);
    DDX_Text(pDX,10002,num2);
DDX_Text(pDX,10003,num3);
//}}AFX_DATA_MAP

但是奇怪的是在VS2008里面,通过类向导,却没有这样关联的代码,这是让我很疑惑的?希望高手可以帮忙解决==??

不过记住变量num1,num2,num3的声明


刚开始的时候我把创建编辑框的代码放在CDialog::OnInitDialog();之后,结果程序奔溃了

(感谢http://topic.csdn.net/t/20060926/16/5049531.html)我就是在这里寻找到答案的==

应该是CDialog::OnInitDialog();里调用了DoDataExchange,进行初始化,结果此时尚未执行创建编辑框的代码,所以无法关联,所以必须在之前创建,

所以在初始化函数里面添加如下代码

BOOL C动态创建的控件关联变量Dlg::OnInitDialog()
{

	m_edit1.Create( WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER,CRect(10,10,100,30),this,10001);
	m_edit2.Create( WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER,CRect(10,50,100,70),this,10002);
	m_edit3.Create( WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER,CRect(10,90,100,110),this,10003);

	CDialog::OnInitDialog();

	// 将“关于...”菜单项添加到系统菜单中。

	// IDM_ABOUTBOX 必须在系统命令范围内。
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	// TODO: 在此添加额外的初始化代码

	

	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

再在创建一个按钮,在其消息响应函数里面添加计算num1,num2,的值放到num3

代码如下

void C动态创建的控件关联变量Dlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(true);
         num3=num1+num2;
	UpdateData(false);
}


效果如图



评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值