RichEdit 2.0 的字串闪烁 点击:195 | 回复:0



xilinxue

    
发表于:2010-02-12 17:52:21
楼主
上位机软件需要做一个字串闪烁的提示功能,

于是我就想到了要用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);
}


楼主最近还看过

SSI ļʱ