当前位置: 首页 > 工具软件 > M edit > 使用案例 >

MFC Edit Control编辑框中值得获取方法总结

商昂然
2023-12-01

**

控件变量分为值变量和控件类的变量

**
值变量:与控件关联的数据变量,可以为任何MFC基本数据类型,在控件和变量之间有两种数据的传递方式:控件传递给变量(表征为向控件输入数值改变与之关联的变量的值),和变量传递给控件(表征为刷新后控件中的数值发生变化)

控件类的变量:控件类的对象,方便对控件本身进行操作,比如设置焦点,显示隐藏控件本身等,代替GetDlgItem()函数;

控件与其相关联的变量之间的值传递

1.传递方式
①控件传递给变量:
通过修改控件框中的数值,来改变与控件关联变量的数值;
②变量传递给控件:
通过修改变量的值来改变控件框的显示;
2.数据交换和检验
现在我们来思考当控件框值和与之关联的变量有一方发生改变时,是谁监测检验并执行数据的交换呢?在MFC中有这样两个函数
DoDataExchange(); //执行数据交换
UpdateData(); //监测检验

DoDataExchange()来执行数据的交换,这个函数是MFC自动生成的函数,只要有关联变量,MFC就会在次函数中自动添加关联语句;
void CAdditionDlg::DoDataExchange(CDataExchange* pDX)
{
// 处理MFC默认的数据交换
CDialogEx::DoDataExchange(pDX);
// 处理控件IDC_SUMMAND_EDIT和变量m_editSummand之间的数据交换
DDX_Text(pDX, IDC_SUMMAND_EDIT, m_editSummand);
// 处理控件IDC_ADDEND_EDIT和变量m_editAddend之间的数据交换
DDX_Text(pDX, IDC_ADDEND_EDIT, m_editAddend);
// 处理控件IDC_SUM_EDIT和变量m_editSum之间的数据交换
DDX_Text(pDX, IDC_SUM_EDIT, m_editSum);
}
但是这个函数并不会自动响应,需要人为的调用,就是说何时进行数据的交换,即使用UpdateData()函数进行调用DoDataExchange()函数的执行,
UpdateData()函数的原型为:BOOL UpdateData(BOOL bSaveAndValidate = TRUE);
参数:bSaveAndValidate用于指示数据传输的方向,TRUE表示从控件传给变量,FALSE表示从变量传给控件。默认值是TRUE,即从控件传给变量。
例如:

void CAdditionDlg::OnBnClickedAddButton()   
{  
    // 将各控件中的数据保存到相应的变量   
    UpdateData(TRUE);   
    // 将被加数和加数的加和赋值给m_editSum   
    m_editSum = m_editSummand + m_editAddend;  
    // 根据各变量的值更新相应的控件。和的编辑框会显示m_editSum的值   
    UpdateData(FALSE);   
}  

1、SetDlgItemText(IDC_EDIT_DATA,m_data); //前一个是ID号,后一个是编辑框的成员变量; 只更新特定的编辑中的内容
2、UpdateData(FALSE); //UpdateData(FALSE)更新的是窗口中所有编辑框中的内容

  • 绑定了控件变量m_data 就用不到GetItemDlg了
  • GetItemDlg是在没邦定控件或者值变量的情况下使用的
  • 因为绑定的是值变量所以用Updatedata()

editCtrl关联整型变量
(1)在对话框对应的类中添加一个整型变量m_data,并在构造函数中初始化为0;
(2)为控件添加失去焦点时的响应函数:

void CMfcTestDlg::OnEnKillfocusEditData()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_data = GetDlgItemInt(IDC_EDIT_DATA);
GetDlgItem(IDC_EDIT_NUMBER)->SetFocus();
//如果需要把数值显示在控件上,则可以使用如下代码:
m_data= 123;
SetDlgItemInt(IDC_EDIT_DATA,m_data);

}

一、获取EditControl的内容

(1)EditControl项,声明控件变量的类别为Value,变量类型为CString,变量名为m_sEdit_Content.

CString m_sEdit_Content;
CString s;
UpdateData(true);
s=m_sEdit_Content.GetString();
MessageBox(s,_T(“获取编辑框的内容”),MB_OK);
s.ReleaseBuffer();

这样就取得了编辑框的内容

UpdateData(true);这句代码很重要,它的作用是将输入的数据装入EditControl对应的变量m_sEdit_Content 中.
由于MFC应用程序向导默认是使用Unicode库,所以MessageBox中的字符串需要用_T(),否则会出现const char[]转换LPCTSTR错误,如果不使用

Unicode库就不需要_T().

(2)声明控件变量的类别为Control,变量类型为CEdit,变量名为m_Edit_Content.
代码如下(Unicode)
CString s;
s.GetBufferSetLength(1024);
m_Edit_Content.GetWindowTextW(s.GetBuffer(),s.GetLength());
MessageBox(s,_T(“获取文本框的内容”),MB_OK);
s.ReleaseBuffer();

如果不是Unicode下获取编辑框内容的函数就是GetWindowTextA

二、将EditControl中的内容转化为整数

在限制编辑框只能数字之后,要将字符串转化为整数
声明控件变量的类别为Value,变量类型为CString,变量名为m_sEdit_Content.
CString s;
UpdateData(true);
s=m_sEdit_Content.GetString();
int n=_tstoi(s);
s.ReleaseBuffer();

n就是所需要的整数
在VC2005下字符串转换成整数需要_tstoi这个函数

三、限制编辑框的输入长度
声明控件变量的类别为Control,变量类型为CEdit,变量名为m_Edit_Content.
在对话框初始化的地方写m_Edit_Content.SetLimitText(1);
编辑框就只能输入一个字符了.

 类似资料: