本人正在做一个扩展的CEDIT类,前面几个功能已经完成。现在遇到的一个问题就是:
需要时编辑框在光标处输入文字时能过达到自动截断功能。
例如:
EDIT中本来有5个字符:ABCDE,将光标停留在C之后,我想规定长度为10个字符;
那么我将一个长度为9的字符串FGHIJKLMN粘贴到C之后。那么最终在EDIT中显示的是:ABCFGHIJKL。后面的MNDE由于长度限制被自动截断。我的想法是先获取光标左侧的字符串长度,让后通过此长度和限制长度计算出需要显示的字符串,最终达到效果。
但是不知道如何获取光标左侧的字符串,所以不知道怎样实现功能。那位仁兄能帮忙给个其他的思路,或者就我的思路给出几个有用的函数。那就太谢谢了啊!
先在这里感谢下大家的关注了!

解决方案 »

  1.   

    GetSel
    获取光标指向的最后的字符nEndChar
      

  2.   

    "用SetLimitText来限制字符数",只能达到限制长度的作用,但是当字串达到最大长度之后,你在字符串中的光标处插入字符就没有任何效果了,不能达到插入字符覆盖后面字符的效果了!
      

  3.   

    可以处理EN_CHANGE消息,在里面进行处理如
    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

    }
      

  4.   

    CEdit::SetLimitText()可以设置编辑框最大字符数量。
    获取光标左侧字符数,可以在EN_CHANGE消息响应函数中做如下处理:
    int nl,int nr;
    pEdit->GetSel(nl,nr);
    nl即为光标左侧字符数量
      

  5.   

    请正确使用术语,光标是Cursor,你说的应是Caret 脱字符,或至少说成“文字光标”:)
      

  6.   

    如果是对话框响应消息的话,肯定是EN_CHANGE消息。
    Caret重置的问题,你可以先缓存当前位置、再做处理、最后重置Caret位置,
    GetSel/SetSel,当然缓存的位置有可能需要做调整。如果是派生CEdit类的话,可重载响应WM_CHAR消息和WM_PASTE消息。
      

  7.   

    大概ReplaceSel也会用得比较多些