如何让CEdit或RichEdit如何设置某一行的文字颜色?(图) 本帖最后由 jpinglove 于 2009-06-30 00:45:17 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CEdit不支持Richedit的话,在段落格式里面设置,参考wordpad示例。 用CRichEditCtrl吧,先用CRichEditCtrl::SetSel选择要设置颜色的字符,再用CRichEditCtrl::SetSelectionCharFormat设置选中字符的颜色。PS:用CRichEditCtrl前,要把AfxInitRichEdit放到InitInstance里进行初始化。不然会出错。CRichEditCtrl m_cRichEdit;int lineStart,lineEnd;CHARFORMAT cFmt; cFmt.cbSize = sizeof(CHARFORMAT);cFmt.crTextColor = RGB(0,0,255);cFmt.dwEffects = 0;cFmt.dwMask = CFM_COLOR;lineStart = m_cRichEdit.LineIndex(0);//取第一行的第一个字符的索引lineEnd = m_CRichEdit.LineIndex(1)-1;//取第一行的最后一个字符的索引——用第二行的第一个索引减1来实现m_cRichEdit.SetSel(lineStart,lineEnd);//选取第一行字符m_cRichEdit.SetSelectionCharFormat(cFmt);//设置颜色 CRichEditCtrl有现成的函数可以用,用SetSel来选中你需要改的文字,再用SetSelectionCharFormat来设置一下就行了用CEdit的话,需要子类化,这样你想怎样改就怎样改。 对,用CRichEditCtrl这样确实能实现不同的行,不同的颜色.不这,这里有一个严重的问题.如果多行的话,就只能有一行,是颜色不同的.大家看下,上面的图.我设置的默认颜色是绿色,自己定义的别一种颜色是橙色.我想要的效果是:第一行, 也就是 1111 这个是绿色.然后,第二行, 22222是橙色.这样交替着两种颜色.第三行 的 3333333 是绿色第四行 的 444444 是橙色.可是,大家 也能看到,并不是那样的, 而是当CRichEditCtrl文本发生改变时,里面所有的文字颜色变成默认颜色.这样一来,只有一行文字的颜色在变.怎么能解决这个问题叫呢??? void CTipTestDlg::EditAddText(){ CString s1 = ""; CString s2 = ""; //从EDIT上得到刚输入的字符串(也就是图片中,显示5555那个EDIT) GetDlgItemText(IDC_EDIT3, s1); SetDlgItemText(IDC_EDIT3 , ""); //把输入栏清空 s2 += s1 + "\r\n"; //加个回车 int start = m_Redit.GetTextLength(); //得到目前RICH里,字符个数 int end = 0; m_str += s2; //m_str是RICH关联的一个CString变量 UpdateData(FALSE); //SetDlgItemText(IDC_RICHEDIT2 , s2); m_Redit.LineScroll(m_Redit.GetLineCount() , 0); //让RICH向下滚动,m_Redit也是一个关联变量 int len = m_Redit.GetLineCount(); //得到行数 len = len%2; 模上2 switch (len) { case 1: end = m_Redit.GetTextLength(); //得到增加后的文字个数 m_Redit.SetSel(start , end); //设置选择 m_Redit.SetSelectionCharFormat(mycf); //改变颜色 break; }}上面是我写的功能实现代码, 这个是响应一个回车事件, 然后, 在这里处理的. 文本拖动的问题 请问谁有DDK的配置流程,DDK2600+XP+VC6的。。配不出来。。 请教 一个运动图片的问题 璇诲唴瀛橈紒 这两个有什么区别 如何实现office卡通,金山毒霸医生那种图形编程? 请大家看看我的问题,会者不难啊 16进制CString转字节组出问题,求助? 怎么在对话框中内嵌一个对话框 如何把本地机器上的文件Copy到一个域里的其它机器上。 求助,CHttpFile::ReadString 函数,跳出循环字符串就被清空
Richedit的话,在段落格式里面设置,参考wordpad示例。
先用CRichEditCtrl::SetSel选择要设置颜色的字符,
再用CRichEditCtrl::SetSelectionCharFormat设置选中字符的颜色。
PS:用CRichEditCtrl前,要把AfxInitRichEdit放到InitInstance里进行初始化。不然会出错。CRichEditCtrl m_cRichEdit;
int lineStart,lineEnd;
CHARFORMAT cFmt;
cFmt.cbSize = sizeof(CHARFORMAT);
cFmt.crTextColor = RGB(0,0,255);
cFmt.dwEffects = 0;
cFmt.dwMask = CFM_COLOR;lineStart = m_cRichEdit.LineIndex(0);//取第一行的第一个字符的索引
lineEnd = m_CRichEdit.LineIndex(1)-1;//取第一行的最后一个字符的索引——用第二行的第一个索引减1来实现
m_cRichEdit.SetSel(lineStart,lineEnd);//选取第一行字符
m_cRichEdit.SetSelectionCharFormat(cFmt);//设置颜色
用SetSel来选中你需要改的文字,再用SetSelectionCharFormat来设置一下就行了用CEdit的话,需要子类化,这样你想怎样改就怎样改。
我想要的效果是:
第一行, 也就是 1111 这个是绿色.
然后,第二行, 22222是橙色.
这样交替着两种颜色.
第三行 的 3333333 是绿色
第四行 的 444444 是橙色.
可是,大家 也能看到,并不是那样的, 而是当CRichEditCtrl文本发生改变时,里面所有的文字颜色变成默认颜色.
这样一来,只有一行文字的颜色在变.怎么能解决这个问题叫呢???
{
CString s1 = "";
CString s2 = ""; //从EDIT上得到刚输入的字符串(也就是图片中,显示5555那个EDIT)
GetDlgItemText(IDC_EDIT3, s1);
SetDlgItemText(IDC_EDIT3 , ""); //把输入栏清空
s2 += s1 + "\r\n"; //加个回车 int start = m_Redit.GetTextLength(); //得到目前RICH里,字符个数
int end = 0;
m_str += s2; //m_str是RICH关联的一个CString变量
UpdateData(FALSE);
//SetDlgItemText(IDC_RICHEDIT2 , s2);
m_Redit.LineScroll(m_Redit.GetLineCount() , 0); //让RICH向下滚动,m_Redit也是一个关联变量
int len = m_Redit.GetLineCount(); //得到行数
len = len%2; 模上2 switch (len)
{
case 1:
end = m_Redit.GetTextLength(); //得到增加后的文字个数
m_Redit.SetSel(start , end); //设置选择
m_Redit.SetSelectionCharFormat(mycf); //改变颜色
break;
}
}
上面是我写的功能实现代码, 这个是响应一个回车事件, 然后, 在这里处理的.