我要添加的文本是从文件中一个个读出来的,读出来的文本追加在最后,而光标的的位置(Caret)则是要表示用户要进行操作的文本,比如更改,变字体等,是不能改变的,如何实现这种效果?
用下面的方法不好:即先用GetSel得到原来的位置,用SetSel()把光标设到最后,用ReplaceSel加入文本后再用SetSel()放回原来位置。
原因是用SetSel导致窗口重画,并使右边的滚动条自动滚动到光标的位置,而不能看见新加入的字符了。
如何能够解决?谢谢!
int iTotalTextLength = GetRichEditCtrl().GetWindowTextLength();
GetRichEditCtrl().SetSel(iTotalTextLength, iTotalTextLength);
GetRichEditCtrl().ReplaceSel(strMsg);
GetRichEditCtrl().ReplaceSel("\r\n");
int iStartPos = iTotalTextLength;
int iEndPos = GetRichEditCtrl().GetWindowTextLength();
GetRichEditCtrl().SetSel(iStartPos, iEndPos);
CHARFORMAT cf;
cf.cbSize = sizeof(CHARFORMAT);
cf.dwMask = CFM_COLOR | CFM_UNDERLINE;// | CFM_BOLD
cf.dwEffects =(unsigned long) ~( CFE_AUTOCOLOR | CFE_UNDERLINE);// | CFE_BOLD
cf.crTextColor = clRGB;//RGB(0, 0, 0);
GetRichEditCtrl().SetSelectionCharFormat(cf);
GetRichEditCtrl().SetSel(iEndPos,iEndPos);
GetRichEditCtrl().LineScroll(1);
focus
你把以前的光标位置(你好|你好)保存了,添加文字后再用SetSel(nOldStartchars,nOldEndChars)把以前的位置选中就可以了。
向RichEditView中添加文本而不用ReplaceSel()函数,你还可以用StreanIn()函数,如果你有msdn的话,很容易查到它的用法。