CEdit获取编辑框的内容
大家对获取编辑框的内容可能已经很熟悉了,无非是先定义一个CString类型的变量m_str,然后调用GetDlgItem(编辑框ID)->GetWindowText(str),这样就可以轻松获取到编辑框的内容。但如果我要设置此编辑框为只读模式,要求我们获取编辑框的内容,那该怎么办呢?
我们知道,ReadOnly是CEdit的成员变量,显然定义CString类型的变量不能完成既定目标。这时我们就必须为编辑框绑定一个CEdit类型的控件变量m_string。将此编辑框设置为只读模式就很简单了,直接调用函数m_string.SetReadOnly();就可以了。
获取单行文本相对比较简单,这里简单介绍下,关于获取多行文本,MSDN有详细介绍,还有实例,大家可以参考下。具体方法如下:
首先,我们定义一个CString类型的变量str_data,用来保存获取到的编辑框的内容。然后计算编辑框文本的长度,使用CEdit的成员函数GetLine即可得到编辑框的内容,最后要记得释放字符串缓冲区,否则有关CString的操作将不可用!代码如下:
m_string.SetReadOnly();
CString str_data;
int len = m_string.LineLength();
m_string.GetLine(0,str_data.GetBuffer(len), len);
str_data.ReleaseBuffer(len);
如果想把编辑框的文本转化为int型,只需调用函数atoi,如下所示:
int num = atoi(str_data);
则num中保存的就是int型的数据。
最后与网友分享两篇别人总结的相关知识。
1、CEdit获取一行的文字
CEdit的接口LineLength(nCharIndex) 的参数并不是指CEdit的第几行,需要通过函数LineIndex来进行转换。
int nIndex = 4 ; //假设要获取CEdit的第4行的文字
int nCharIndex = nCharIndex = this->LineIndex(nIndex) ;
int nlen = this->LineLength(nCharIndex) ;
CString strText ;
this->GetLine(nIndex, strText.GetBuffer(nlen), nlen) ;
strText.ReleaseBuffer() ;
2、获取鼠标双击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() ;
}