在使用RichEditView时,发现中文占一个文字选择位,就是使用 GetSe 与SetSel函数时。而使用早期的Rich Edit 1.0版本就没有这个问题,中文当两个选择位。
这样主要的问题是,如果我想改变我选择中的一段文字中的一个词的颜色字体等格式,类似关键字显示一槎,这一串数据中有中文也有英文,一般的处理是先得到选择的文字,对文字进行判断。
pCtrl->SetSel(nStartChar, nEndChar);
CString str = pCtrl->GetSelText();但问题出来了,如果用
char c = str.GetAt(index);
int iLen  = str.GetLength();
for (int i=0; i++; i<iLen)
{
   //查找处理。这里的 i 是文字在选择字串的的相对位置,但如果有中文的话,
   //这个位置相对就会出错,主要是这里中文是两个位置,但在Rich Edit用SetSel
   //中文只占一个选择位。
}

1、如何正确处理? 难道自己一定要判断 char c 是否是一个中文的办法处理吗?

解决方案 »

  1.   

    为什么要一个一个字符进行处理啊?
    使用CString的成员函数就可以处理了啊。
      

  2.   

    我不知道我错了还是楼主错了:
    我觉得,在RichEdit用SetSel,中文应该占两个选择位。我是过了,如果RichEdit内的内容是:Test测试
    用SetSel(3,5),按楼主的意思,应该选中:t测试
    而我的测试结果告诉我,选中的部分是:t测
      

  3.   

    在RichEdit用SetSel,中文应该占两个选择位,但是很特别,楼主不好意思!
    如果RichEdit内的内容是:Test测试
    则测试结果如下:
    SetSel(1,2) - e
    SetSel(1,3) - es
    SetSel(1,4) - est
    SetSel(1,5) - est测
    SetSel(1,6) - est测
    SetSel(1,7) - est测试
    SetSel(1,8) - est测试
      

  4.   

    使用RichEditView时,如果文本的内容是:Test测试
    如果要看出具体的效果,
    SetSel(1,6) - est测试其实为看出效果,可以字符长一些,如:这是一人测试123456789这是一个测试
    就主要是我要找关键字,找到后变它的颜色,位置很重要。一楼说的方法感觉不行。
      

  5.   

    看看这个好东西:
    http://www.codeproject.com/richedit/rulerricheditctrl.asp