Edit Control控件最常见的用法,一般有有以下几种:
1、 显示默认的字符串;
2、 接受用户输入的字符串。
3、 作为密码框接受用户输入的字符串。
Edit Control对应的MFC类为CEdit类。而CEdit是继承自CWnd类的,所以也继承了来自CWnd类的GetWindowText()和SetWindowText()。其实从这两个函数的名字大家都可以看出来是做什么用的了。
我们来一步一步实现Edit Control控件的这三种最常见的用法。
首先,先建立一个项目,在VC++中选择MFC,选择MFC应用程序,并选择基于对话框的。项目完全打开后,我们可以看到默认生成的对话框,我们从工具箱拉一个Edit Control到对话框上。使用Ctrl+左键双击,创建一个和Edit Control控件的一个变量,也即一个CEdit类的对
象。此处为m_edit.
接下来我们可以在对话框的CXXXDlg::OnInitDialog()中添加代码。此处XXX是项目名称。在此函数中添加:
m_edit.SetWindowText(_T("welcome to edit"));
然后我们调试程序,就可以看到对话框上面放置的Edit Control中显示了上述字符串的内容。其实这个函数很简单,只是一个需要设置的字符串。我们来看下关于这个函数的具体内容:
CWnd::SetWindowText
void SetWindowText( LPCTSTR lpszString );
参数:
void SetWindowText( LPCTSTR lpszString );
参数:
lpszString | 指向一个CString对象或以null结尾的字符串,将被用作新的标题或控件文本。 |
说明:
这个函数将窗口的标题设为指定的文本。如果窗口为一个控件,则将设置控件内的文本。
这个函数使一条WM_SETTEXT消息被发送到这个窗口。
而我们要得到Edit Control控件中输入的内容的话,我们需要一个触发。此处我们以点击确定键为触发。双击资源中的对话框上的确定键,我们可以直接到达函数CXXXtDlg::OnBnClickedOk()的位置,然后我们可以在这个函数中添加如下代码:
控件的使用 CString lpszStringBuf;
m_edit.GetWindowText(lpszStringBuf);
MessageBox(lpszStringBuf);
这几句代码可以接受控件的文本内容,然后以一个消息的形式显示出来。
我们也来具体分析下GetWindowText:
CWnd::GetWindowText
int GetWindowText( LPTSTR lpszStringBuf, int nMaxCount ) const;
void GetWindowText( CString& rString ) const;
返回值:
指定了要拷贝的字符串的长度,以字节为单位,不包括结尾的空字符。如果CWnd没有标题或标题为空,则为0。
参数:
int GetWindowText( LPTSTR lpszStringBuf, int nMaxCount ) const;
void GetWindowText( CString& rString ) const;
返回值:
指定了要拷贝的字符串的长度,以字节为单位,不包括结尾的空字符。如果CWnd没有标题或标题为空,则为0。
参数:
lpszStringBuf | 指向要接收窗口标题的复制字符串的缓冲区。 |
nMaxCount | 指定了要拷贝的缓冲区的最大字符数目。如果字符串比nMaxCount指定的数目还要长,则被截断。 |
rString | 用于接收窗口标题的复制字符串的CString对象。 |
说明:
这个函数将CWnd的标题(如果有)拷贝到lpszStringBuf指向的缓冲区或者目的字符串rString。如果CWnd对象是一个控件,则GetWindowText成员函数将拷贝控件内的文本(而不是控件的标题)。这个成员函数会向CWnd对象发送一个WM_GETTEXT消息。
其实这两个功能的实现都很简单,只是使用了一个函数就可以实现了。如果要是想做一个密码输入框怎么办呢?其实跟上面的比起来,只需要在Edit Control控件的属性中将Password的属性改为TRUE就可以了。怎么样,很简单吧,我们来试一试吧
MFC里面的EDIT Control控件的用法是怎么样的,1.怎么样才能赋值给EDIT Control控件并在EDIT Control控件显示出来;2.怎么取得EDIT Control控件的值并传递给一个变量?希望各位大侠帮帮忙!
//获得EDIT
CEdit* pBoxOne;
//获得EDIT
CEdit* pBoxOne;
pBoxOne = (CEdit*) GetDlgItem(IDC_EDIT1);
//付值
pBoxOne->SetWindowText( _T("FOO" ));
//取值
CString str;
pBoxOne->GetWindowText(str);
GetDlgItem(IDC_EDIT1)->SetWindowText( _T"FOO" );
也可以
//取值
CString str;
GetDlgItem(IDC_EDIT1)->GetWindowText(str);
//付值
pBoxOne->SetWindowText( _T("FOO" ));
//取值
CString str;
pBoxOne->GetWindowText(str);
GetDlgItem(IDC_EDIT1)->SetWindowText( _T"FOO" );
也可以
//取值
CString str;
GetDlgItem(IDC_EDIT1)->GetWindowText(str);
EditControl是在MFC对话框中最频繁的使用的控件之一
VC++2005提供EditControl的属性和控件事件操作简单方便
1只允许输入数字
如果设置EditControl中只能输入数字,在VC6.0中需要编写一个派生类来达到目的,而在VC++2005下只需要在属性对话框中将Number的属性值设
如果设置EditControl中只能输入数字,在VC6.0中需要编写一个派生类来达到目的,而在VC++2005下只需要在属性对话框中将Number的属性值设
为True就可以了.
2获取EditControl的内容
两种方法
第一种,利用MFC应用程序向导生成一个基于对话框的应用程序,从资源视图中选择该Dialog窗体,利用右侧的工具箱,向Dialog内添加一个
两种方法
第一种,利用MFC应用程序向导生成一个基于对话框的应用程序,从资源视图中选择该Dialog窗体,利用右侧的工具箱,向Dialog内添加一个
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();
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错误,如果不使用
由于MFC应用程序向导默认是使用Unicode库,所以MessageBox中的字符串需要用_T(),否则会出现const char[]转换LPCTSTR错误,如果不使用
Unicode库就不需要_T().
第二种方法
声明控件变量的类别为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)
CString s;
s.GetBufferSetLength(1024);
m_Edit_Content.GetWindowTextW(s.GetBuffer(),s.GetLength());
MessageBox(s,_T("获取文本框的内容"),MB_OK);
s.ReleaseBuffer();
如果不是Unicode下获取编辑框内容的函数就是GetWindowTextA
3将EditControl中的内容转化为整数
在限制编辑框只能数字之后,要将字符串转化为整数
声明控件变量的类别为Value,变量类型为CString,变量名为m_sEdit_Content.
CString s;
UpdateData(true);
s=m_sEdit_Content.GetString();
声明控件变量的类别为Value,变量类型为CString,变量名为m_sEdit_Content.
CString s;
UpdateData(true);
s=m_sEdit_Content.GetString();
int n=_tstoi(s);
s.ReleaseBuffer();
s.ReleaseBuffer();
n就是所需要的整数
在VC2005下字符串转换成整数需要_tstoi这个函数
4限制编辑框的输入长度
声明控件变量的类别为Control,变量类型为CEdit,变量名为m_Edit_Content.
在对话框初始化的地方写m_Edit_Content.SetLimitText(1);
编辑框就只能输入一个字符了.
声明控件变量的类别为Control,变量类型为CEdit,变量名为m_Edit_Content.
在对话框初始化的地方写m_Edit_Content.SetLimitText(1);
编辑框就只能输入一个字符了.
1.设置edit只读属性
方法一:m_edit1.SetReadOnly(TRUE);
方法二:::SendMessage(m_edit1.m_hWnd, EM_SETREADONLY, TRUE, 0);
方法二:::SendMessage(m_edit1.m_hWnd, EM_SETREADONLY, TRUE, 0);
2.判断edit中光标状态并得到选中内容(richedit同样适用)
int nStart, nEnd;
CString strTemp;
CString strTemp;
m_edit1.GetSel(nStart, nEnd);
if(nStart == nEnd)
{
strTemp.Format(_T(" 光标在%d" ), nStart);
AfxMessageBox(strTemp);
}
else
{
//得到edit选中的内容
m_edit1.GetWindowText(strTemp);
strTemp = strTemp.Mid(nStart,nEnd-nStart);
AfxMessageBox(strTemp);
}
if(nStart == nEnd)
{
strTemp.Format(_T(" 光标在%d" ), nStart);
AfxMessageBox(strTemp);
}
else
{
//得到edit选中的内容
m_edit1.GetWindowText(strTemp);
strTemp = strTemp.Mid(nStart,nEnd-nStart);
AfxMessageBox(strTemp);
}
注:GetSel后,如果nStart和nEnd,表明光标处于某个位置(直观来看就是光标在闪动);
如果nStart和nEnd不相等,表明用户在edit中选中了一段内容。
如果nStart和nEnd不相等,表明用户在edit中选中了一段内容。
获取edit一行内容:
CString str_data;
int index=m_string.lineindex();
int len = m_string.LineLength();
m_string.GetLine(index,str_data.GetBuffer(len), len);
str_data.ReleaseBuffer(len);
如果想把编辑框的文本转化为int型,只需调用函数atoi,如下所示:
int num = atoi(str_data);
则num中保存的就是int型的数据。
获取鼠标双击CEdit的那行文字
void MyEdit::OnLButtonDblClk(UINT nFlags, CPoint point)
{
CEdit::OnLButtonDblClk(nFlags, point) ;
int nIndex = this->CharFromPos(point) ;
int nCharIndex = LOWORD(nIndex) ;
nIndex = HIWORD(nIndex) ;
if (nIndex == -1)
{
return ;
}
CString strText ;
int nCharIndex = this->LineIndex(nIndex) ;
int nlen = this->LineLength(nCharIndex) ;
this->GetLine(nIndex, strText.GetBuffer(nlen), nlen) ;
strText.ReleaseBuffer() ;
}
3.在edit最后添加字符串
CString str;
m_edit1.SetSel(-1, -1);
m_edit1.ReplaceSel(str);
m_edit1.SetSel(-1, -1);
m_edit1.ReplaceSel(str);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论