您的位置:首页 > 其它

MFC获取编辑框内容以及UpdateData方法

2014-04-27 01:11 846 查看
编程中多次用到获取界面中编辑框中的内容。关于编辑框还有一些其他的问题:如UpdateData(TRUE),函数参数为TRUE或FALSE的含义,以及编辑框关联值变量(CString)以及控件变量(Edit)获取编辑框的内容等问题。先就这几个问题做小结,供后续参考,后续再做补充。

新建测试界面如下:



图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都是有效的,都可以在此情况下获取编辑框中的内容。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: