MFC获取编辑框内容以及UpdateData方法
2014-04-27 01:11
846 查看
编程中多次用到获取界面中编辑框中的内容。关于编辑框还有一些其他的问题:如UpdateData(TRUE),函数参数为TRUE或FALSE的含义,以及编辑框关联值变量(CString)以及控件变量(Edit)获取编辑框的内容等问题。先就这几个问题做小结,供后续参考,后续再做补充。
新建测试界面如下:
图1 测试工程界面
一、关联字符串变量的编辑框获取编辑框的内容
关联字符串变量的编辑框添加变量(值变量,Value CString 如下图所示)
图2 编辑框控件关联值变量
对应地测试代码添加到 测试1 对应的消息响应函数中,代码如下:
代码中调用函数UpdateData获取变量的值,参数为TRUE和FALSE所得结果见注释。
这里对UpdateData函数做一个小结:
UpdateData(TRUE): 表示写数据,将窗口控制变量写入内存(更新数据)
-------使用OnOk时将自动调用UpdateData(True) ,用以将窗口数据写入内存相应成员变量中;
UpdateData(FALSE): 表示读数据,即显示窗口读取内存的数据以供实时显示
------使用OnInitDialog中,MFC调用UpdateData((FALSE)将内存成员数据显示到对应的窗口中
所谓写数据,即是将外部数据写入到内存变量中(改变内存数据);
所谓读数据,显示窗口读取内存数据(不改变内存数据)
二者经常使用于如下情况:
在设置窗口数据默认值时,或将窗口数据作为控制参数传入到内存时,这时需要往内存写入数据,此时应首先调用UpdataData(TRUE);
写入之后,需要观察内存这个数据的变化,这时应该时刻读取内存数据,此时应调用UpdateData(FALSE)
例如 CDialog的两个成员函数OnInitDialog()和OnOK()
关于UpdateDate函数,设置断点发现,该函数在CDialog启动的时候,和关闭的时候都调用。解释:CWnd::UpdateData
调用此函数来初始化对话框中的数据,或者从对话框中接收数据。当一个模态对话框被创建,框架会自动在CDialog::OnInITDialog中调用UpdateData(FALSE),这种调用发生在对话框可视情况下,默认的CDialog::OnOK会调用UpdateData(TRUE)来接收数据。。。如果接收成功。。。就会关掉对话框。。。Cancel对话框不会调用此函数而直接关闭对话框。 简单的说,如果Updatedata(TRUE) == 将控件的值赋值给成员变量,Updatedata(FALSE) == 将成员变量的值赋值给控件。
二、关联控件变量的编辑框获取编辑框中的内容
图3 编辑框控件关联控件变量
对应地测试代码添加到 测试2 对应的消息响应函数中,代码如下:
代码中方法1和方法2都是有效的,都可以在此情况下获取编辑框中的内容。
新建测试界面如下:
图1 测试工程界面
一、关联字符串变量的编辑框获取编辑框的内容
关联字符串变量的编辑框添加变量(值变量,Value CString 如下图所示)
图2 编辑框控件关联值变量
对应地测试代码添加到 测试1 对应的消息响应函数中,代码如下:
void CGetEditctrlDataDlg::OnTest() { //调用函数 //BOOL b=TRUE; BOOL b=FALSE; UpdateData(b); CString str; //b=TRUE str的值为输入编辑框的字符串值 //b=FALSE str的值为 空 str=m_strValue; MessageBox(str); }
代码中调用函数UpdateData获取变量的值,参数为TRUE和FALSE所得结果见注释。
这里对UpdateData函数做一个小结:
UpdateData(TRUE): 表示写数据,将窗口控制变量写入内存(更新数据)
-------使用OnOk时将自动调用UpdateData(True) ,用以将窗口数据写入内存相应成员变量中;
UpdateData(FALSE): 表示读数据,即显示窗口读取内存的数据以供实时显示
------使用OnInitDialog中,MFC调用UpdateData((FALSE)将内存成员数据显示到对应的窗口中
所谓写数据,即是将外部数据写入到内存变量中(改变内存数据);
所谓读数据,显示窗口读取内存数据(不改变内存数据)
二者经常使用于如下情况:
在设置窗口数据默认值时,或将窗口数据作为控制参数传入到内存时,这时需要往内存写入数据,此时应首先调用UpdataData(TRUE);
写入之后,需要观察内存这个数据的变化,这时应该时刻读取内存数据,此时应调用UpdateData(FALSE)
例如 CDialog的两个成员函数OnInitDialog()和OnOK()
BOOL CDialog::OnInitDialog() { // execute dialog RT_DLGINIT resource BOOL bDlgInit; if (m_lpDialogInit != NULL) bDlgInit = ExecuteDlgInit(m_lpDialogInit); else bDlgInit = ExecuteDlgInit(m_lpszTemplateName); if (!bDlgInit) { TRACE(traceAppMsg, 0, "Warning: ExecuteDlgInit failed during dialog init./n"); EndDialog(-1); return FALSE; } // transfer data into the dialog from member variables if (!UpdateData(FALSE)) { TRACE(traceAppMsg, 0, "Warning: UpdateData failed during dialog init./n"); EndDialog(-1); return FALSE; } // enable/disable help button automatically CWnd* pHelpButton = GetDlgItem(ID_HELP); if (pHelpButton != NULL) pHelpButton->ShowWindow(AfxHelpEnabled() ? SW_SHOW : SW_HIDE); return TRUE; // set focus to first one }
void CDialog::OnOK() { if (!UpdateData(TRUE)) { TRACE(traceAppMsg, 0, "UpdateData failed during dialog termination./n"); // the UpdateData routine will set focus to correct item return; } EndDialog(IDOK); }
关于UpdateDate函数,设置断点发现,该函数在CDialog启动的时候,和关闭的时候都调用。解释:CWnd::UpdateData
调用此函数来初始化对话框中的数据,或者从对话框中接收数据。当一个模态对话框被创建,框架会自动在CDialog::OnInITDialog中调用UpdateData(FALSE),这种调用发生在对话框可视情况下,默认的CDialog::OnOK会调用UpdateData(TRUE)来接收数据。。。如果接收成功。。。就会关掉对话框。。。Cancel对话框不会调用此函数而直接关闭对话框。 简单的说,如果Updatedata(TRUE) == 将控件的值赋值给成员变量,Updatedata(FALSE) == 将成员变量的值赋值给控件。
二、关联控件变量的编辑框获取编辑框中的内容
图3 编辑框控件关联控件变量
对应地测试代码添加到 测试2 对应的消息响应函数中,代码如下:
void CGetEditctrlDataDlg::OnTest2() { //第二个编辑框关联的是一个Edit的控件变量 CString str; //方法1 获取没有关联 值变量 的编辑框中的内容 通过ID号 //GetDlgItem(IDC_EDIT_TWO2)->GetWindowText(str); //方法2 获取没有关联 值变量 的编辑框中的内容 通过编辑框关联的 控件变量 m_editctrl.GetWindowText(str); MessageBox(str); }
代码中方法1和方法2都是有效的,都可以在此情况下获取编辑框中的内容。
相关文章推荐
- GetSystemDirectory 用法
- JAVA中的static、final关键字
- HDU 3436 Queue-jumpers(SplayTree+离散化)
- HTML5 之 FileReader 的使用 (网页上图片拖拽并且预显示可在这里学到) [转载]
- 法国恢复环境发个邮件
- sql(join中on与where区别)
- 14年4月26日 入住新家了
- 注解实现声明式事务管理
- 关于BeanUtils.copyProperties() 用法及区别
- 把选城市的方法改成了BUG,不,列表
- 切,你做开源难道不是为了钱?
- 如果IPHONE6使用SDR技术,将颠覆手机界
- IOS自学第六篇
- 背包、栈和队列(集合类数据类型的实现)
- MyEclipse9 Maven开发Web工程的图文配置
- 来玩Play框架01 简介
- 我的编程之路(三) 蜗居
- 有关CSS 定位中的盒装模型、position、z-index的学习心得
- Python基础(4)--字符串
- “线程安全的” Dictionary(TKey,TValue)