本人正在做一个扩展的CEDIT类,前面几个功能已经完成。现在遇到的一个问题就是:
需要时编辑框在光标处输入文字时能过达到自动截断功能。
例如:
EDIT中本来有5个字符:ABCDE,将光标停留在C之后,我想规定长度为10个字符;
那么我将一个长度为9的字符串FGHIJKLMN粘贴到C之后。那么最终在EDIT中显示的是:ABCFGHIJKL。后面的MNDE由于长度限制被自动截断。我的想法是先获取光标左侧的字符串长度,让后通过此长度和限制长度计算出需要显示的字符串,最终达到效果。
但是不知道如何获取光标左侧的字符串,所以不知道怎样实现功能。那位仁兄能帮忙给个其他的思路,或者就我的思路给出几个有用的函数。那就太谢谢了啊!
先在这里感谢下大家的关注了!
需要时编辑框在光标处输入文字时能过达到自动截断功能。
例如:
EDIT中本来有5个字符:ABCDE,将光标停留在C之后,我想规定长度为10个字符;
那么我将一个长度为9的字符串FGHIJKLMN粘贴到C之后。那么最终在EDIT中显示的是:ABCFGHIJKL。后面的MNDE由于长度限制被自动截断。我的想法是先获取光标左侧的字符串长度,让后通过此长度和限制长度计算出需要显示的字符串,最终达到效果。
但是不知道如何获取光标左侧的字符串,所以不知道怎样实现功能。那位仁兄能帮忙给个其他的思路,或者就我的思路给出几个有用的函数。那就太谢谢了啊!
先在这里感谢下大家的关注了!
获取光标指向的最后的字符nEndChar
void CEditEx::OnChange()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CEdit::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
CString str;
GetWindowText(str);
if(str.GetLength()>5)
{
str=str.Left(5);
SetWindowText(str);
SetSel(5,5);
}
// TODO: Add your control notification handler code here
}
获取光标左侧字符数,可以在EN_CHANGE消息响应函数中做如下处理:
int nl,int nr;
pEdit->GetSel(nl,nr);
nl即为光标左侧字符数量
Caret重置的问题,你可以先缓存当前位置、再做处理、最后重置Caret位置,
GetSel/SetSel,当然缓存的位置有可能需要做调整。如果是派生CEdit类的话,可重载响应WM_CHAR消息和WM_PASTE消息。