鱼C论坛

 找回密码
 立即注册
查看: 1924|回复: 0

[技术交流] 原创 ---控件变量绑定

[复制链接]
发表于 2014-3-27 19:55:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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无法做到实时呢?



但是我们可以通过初始化来打破其字节限制:


                               
登录/注册后可看大图


这个时候,我们再按下确定时,他就变成提示弹出跟不退出了。







想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-25 12:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表