概述
我们知道如果在资源视图中添加了某个控件之后,如果想把它关联一个变量的话,可以使用类向导中来添加关联变量,但是动态创建的按钮如何让其关联变量呢?
刚开始我想自己首先在资源框里手动添加一个编辑框,然后关联一个变量,看代码哪里改变了,其实在孙鑫的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);
}
效果如图
最后
以上就是暴躁蜜蜂为你收集整理的控件的学习(二)--动态创建按钮之后把它关联变量的全部内容,希望文章能够帮你解决控件的学习(二)--动态创建按钮之后把它关联变量所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复