walnutcy

RichEdit 2.0 的字串闪烁

0
阅读(2565)


上位机软件需要做一个字串闪烁的提示功能,

于是我就想到了要用richedit的SetSel和ReplaceSel,
思路很简单,就是选中要闪烁的字符串,然后交替显示和消隐,
插入闪烁字串时记录插入位置与结束位置,我插在尾端,就用GetTextLength()取得,
试了半天,发现不行,debug跟踪发现是SetSel在捣鬼,
SetSel(min,max)在richedit 2.0中指个是字符个数,我的串中有中文,中文算是一个字符,
用GetTextLength取得是字节数(中文算两个),而SetSel要的是字符数(中文算一个),
google了一下,发下richedit 1.0这样做可以,但2.0 也没有提出解决办法,
没有快速办法,只好自己看看msdn,查了下用GetTextLengthEx(GTL_NUMCHARS)取插入位置,即可满足要求,
做闪烁不一定要做成动态删除插入,也可以做成动态选择与否,
选择显示的函数为:HideSelection
附实现函数:
    CHARRANGE pt;
    if(!flg) // flg 为0 时选中
    {   //当前richedit中的字符总数(汉字算一个)
        pt.cpMax = GetTextLengthEx(GTL_NUMCHARS);
        pt.cpMin = lastInsPos;// 插入时记下插入前的位置
        HideSelection(TRUE,FALSE);
    }
    else    // 不选中
    {
        pt.cpMax = GetTextLengthEx(GTL_NUMCHARS);
        pt.cpMin = lastInsPos;
        SetSel(pt.cpMin,pt.cpMax);
        HideSelection(FALSE,FALSE);
    }