首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

Richedit控件的自定义颜色有关问题,求解

2013-01-23 
Richedit控件的自定义颜色问题,求解我写了个函数,功能是根据颜色属性,把文本添加到richedit控件里,如下voi

Richedit控件的自定义颜色问题,求解
我写了个函数,功能是根据颜色属性,把文本添加到richedit控件里,如下


void AddText(char* pTxt, COLORREF color)
{
CHARFORMAT cf;
ZeroMemory(&cf, sizeof(CHARFORMAT));
cf.cbSize = sizeof(CHARFORMAT);
cf.dwMask = CFM_BOLD | CFM_COLOR | CFM_FACE |
CFM_ITALIC | CFM_SIZE | CFM_UNDERLINE;
cf.dwEffects = 0;
cf.yHeight = 14*14;//文字高度
cf.crTextColor = color; //文字颜色
strcpy(cf.szFaceName ,_T("宋体"));//设置字体

//在添加新的字符串前,先记录当前末尾的位置
long lBegin = GetWindowTextLength();

SetSel(-1, -1);
ReplaceSel(pTxt);

//添加完毕,记录新的长度
long lEnd = GetWindowTextLength();

SetSel(lBegin, pTxt ); //设置新的字符串区域
SetSelectionCharFormat(cf);  //设置这个新添加的区域颜色和字体
}
AddText("test1\n", RGB(255,0,0));
AddText("test2\n", RGB(0,255,0));
AddText("test3\n", RGB(0,0,255));





好了。现在运行一下。
理论上说,运行结果应该是输出3行,每行的字体一种颜色。
结果现在问题出现了:
输出是3行没错,但是颜色不对,比如"test1"和"test2"应该为两种颜色,结果发现,颜色错位了,也没图,说不清楚,反正"test1t"成了一种颜色,“est2te”成了一种颜色。
也就是说,用来定位区域的GetWindowTextLength出了问题。
虽然计算字符串的时候,把换行"\n"计算进去了,但是画颜色的时候,没有usance进去。


该怎么办,求教,就是想实现自定义输入带颜色的文字,并能换行。无奈了现在。怎么统计,+1或者-1都不行
[解决办法]

long lBegin = GetWindowTextLength() + 1;
long lEnd = lBegin + strlen(pTxt);


//在SetSel前设置字体信息
SetSelectionCharFormat(cf);
SetSel(lBegin, lEnd );
ReplaceSel(pTxt);
ReplaceSel("\n");

热点排行