|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
概述:一个控件可以绑定多个不同类型的变量。
说明:
1、这里所谓的不同类型,似乎只有两种:(有些只有一种,比如按钮控件)
a : 对象变量与控件本身绑定 ----control类型
(如编辑框绑定了一个CEidte edit对象,可通过对象调用edit.SetDlgItemText()对控件属性操作)
b: 变量与控件内容绑定 -----value类型
(如编辑框的内容,可定义CString类的某个具体变量与之绑定,通过刷新,可直接把变量显示到编辑框中。亦可通过刷新,把用户输入编辑框的内容,赋值给绑定变量。内容还可以绑定int类型。)
如图:
对象变量与控件本身绑定的方法:
一、获得控件指针
获得指针,操作指针变量就能操作控件,也可以说这是一种绑定。
如:用指针调用各种成员函数,操作控件属性
CButton*p =(CButton*)GetDlgItem(ID);//控件ID与载体窗口指针,得到控件指
针
p->EnableWindow(false); //让按钮变灰
二、控件绑定类对象
概述:类对象与之绑定。与对话框绑定的不同之处是,其控件绑定后,默认就成为了对话框类的成员变量。
然后对对象的操作,就等同于对控件的操作。
绑定步骤如下图:(注意,与绑定窗口对象的区别,见模态与非模态对话框)
说明:
1、绑定对话框,是用add class . 绑定对话框里的控件,是add variable
2、绑定控件后,会默认自动添加成为对话框的类成员变量。而对话框绑定对象,由自己定义位置。
如图:(控件绑定的对象能放到别的地方不作为成员变量吗?)
3、绑定的关联代码:
4、绑定操作有时会失败!!!需要查看绑定代码是否存在!!
注意:有时候编译器会绑定失败,(没有任何提示)所以有时需要手动。
(如何添加???等下再补充)
5、一个控件能绑定多种类型变量,同一类型只能绑定一种。
6、对话框绑定,其绑定的是基类的派生类。而控件绑定,是基类。
7、对话框绑定,是派生“类”与之绑定。控件绑定,是基类的某个具体的对象与之绑定(不是类与之绑定)
变量与控件内容绑定方法:
给编辑框绑定字符串变量cstring
步骤:
1,如图:
2、手动查看是否关联成功,如果没有需要自己添加代码(如何添加?)
与int类型绑定:
步骤:
同上,如果之前绑定了CString 需要删除绑定才能绑定int
Value类型的使用:
UpdateData(false);//把绑定的变量内容赋值给编辑框显示出来
UpdateData(true);//把编辑框现有内容赋值给绑定的变量
如:CString类型m_Edit变量,在初始化中添加代码:
m_Edit = "你好";
UpdateData(false);
在按钮响应函数中添加代码:
void CMFCDialogDlg::OnOK()
{
UpdateData(true);
MessageBox(m_Edit);
CDialog::OnOK();
}
我们在编辑框中写入新值,结果证明 UpdateData(true);后,自动把编辑框内容赋值给了绑定的变量。
int 类型 绑定变量:
初始化中:
m_Iedit = 123;
UpdateData(false);
显示成功。
在按钮响应代码中添加:
void CMFCDialogDlg::OnOK()
{
CString Cshow;
UpdateData(true);
Cshow.Format("%d",m_Iedit);
MessageBox(Cshow);
CDialog::OnOK();
}
显示:一个系统提示弹出,关闭后是自定义弹窗,关闭后又是系统弹窗,然后主窗口不关闭
如果把CDialog::OnOK();去掉,则系统提示窗口不会弹出两次,主窗口依然不关闭。
int 类型绑定说明:
1、UpdateData(false);UpdateData(true);内部自动完成类型转化
int 是整形,而编辑框上,不管是文字还是数字,都是字符形式。理论上说需要转化才能赋值。
但是这里却调用UpdateData即可刷入变量或从变量里读取数据到编辑框
2、系统提示与绑定内部机制
实验可以看出,在类型出错的情况下,本来 CDialog::OnOK();应该关闭的,现在没有关闭。(无错正常关闭)
第一个系统提示,是UpdateData刷入时发送的,然后是MessageBox弹出。这说明程序在往下走,之后执行CDialog::OnOK();时,又一次弹出系统提示。
这应该是内部消息机制等被UpdateData影响了,以至于窗口没被关闭,具体以后再找时间再研究。
3、UpdateData会自动提取编辑框中的数字,赋值给绑定变量(虽然有系统提示)
补充:
1、绑定失败(无提示),自己手动添加绑定(如 int 需要找后面对应的int类型)
选中DDX_Text后跳至定义:
复制后传参数:DDX_Text(pDX, IDC_EDIT1, m_Edit);
pDX照抄。IDC_EDIT1是绑定的ID m_Edit是绑定的变量名
2、int与CString类型默认的初始化值的代码位置:
CString同样在这里(这里没绑定),他默认是m_edit = _T("");
3、CString类型绑定中的字符数限定设置,int类型绑定中的最大最小值设置
此时代码上会自动添加:(如果没有,需要手动添加)
注意:DDV_MaxChars不能单独使用,必须前面要先有DDX_Text
我们按下确定后,会弹出提示(但是我们没有自定义确定响应,也就是说,范围设置,途中改变了默认确定消息,使得弹出提示与本应该关闭主对话框的,而现在没有关闭)
但是CString类型确是可以实时的!!
范围限制,不是实时的(比如我们写的时候不会提示,只有按下确定后才会提示,我们也可以初始化时就超过范围。)
(怎样能实时进行,教程上没说,但应该是有方法的)
同理,还有CString类型的最大字节数限制:(注意是字节)
注意,这个是实时的,5字节,在窄环境下,2个中文,第三个就无法输入中文,只能是英文,而且再也输不进第4个字符了。
按确定后,是正常的退出了!!
为何CString能做到实时而Int无法做到实时呢?
但是我们可以通过初始化来打破其字节限制:
这个时候,我们再按下确定时,他就变成提示弹出跟不退出了。
|
|