我是想通过richeidt动态的设定每一行的文字颜色
但是不知道为什么,设置的结果与我的预想不一样
我的代码是:
void CRichEditDlg::OnShow()
{ // TODO: Add your control notification handler code here
m_strRichEdit += "5678\r\n";
UpdateData(TRUE);
CHARFORMAT cf;
ZeroMemory(&cf, sizeof(CHARFORMAT));
m_richEdit.GetSelectionCharFormat(cf);
cf.cbSize = sizeof(CHARFORMAT);
cf.dwMask = CFM_BOLD | CFM_COLOR | CFM_FACE |
CFM_ITALIC | CFM_SIZE | CFM_UNDERLINE;
cf.dwEffects = 0;
cf.yHeight = 12*12;//文字高度
cf.crTextColor = RGB(200, 100, 255); //文字颜色
strcpy(cf.szFaceName ,_T("隶书"));//设置字体
//m_richEdit.SetDefaultCharFormat(cf);
m_richEdit.SetSel(current, current+6-1); //设置处理区域
current += 6;
m_richEdit.SetSelectionCharFormat(cf); m_richEdit.PostMessage(WM_VSCROLL, SB_BOTTOM, 0);
}可运行的结果是
我第一设定的文字颜色会印象后面n-1次颜色,只有最后第n次的颜色是我最新的
其他前n-1次设定的颜色都被第一次设定的颜色所覆盖,不知道怎么回事比如;
1234 [红色] 1234[红色] 1234[红色] 1234[红色]
=> 2345[绿色] => 2345[红色] => 2345[红色]
3456[黄色] 3456[红色]
4567[蓝色]
但是不知道为什么,设置的结果与我的预想不一样
我的代码是:
void CRichEditDlg::OnShow()
{ // TODO: Add your control notification handler code here
m_strRichEdit += "5678\r\n";
UpdateData(TRUE);
CHARFORMAT cf;
ZeroMemory(&cf, sizeof(CHARFORMAT));
m_richEdit.GetSelectionCharFormat(cf);
cf.cbSize = sizeof(CHARFORMAT);
cf.dwMask = CFM_BOLD | CFM_COLOR | CFM_FACE |
CFM_ITALIC | CFM_SIZE | CFM_UNDERLINE;
cf.dwEffects = 0;
cf.yHeight = 12*12;//文字高度
cf.crTextColor = RGB(200, 100, 255); //文字颜色
strcpy(cf.szFaceName ,_T("隶书"));//设置字体
//m_richEdit.SetDefaultCharFormat(cf);
m_richEdit.SetSel(current, current+6-1); //设置处理区域
current += 6;
m_richEdit.SetSelectionCharFormat(cf); m_richEdit.PostMessage(WM_VSCROLL, SB_BOTTOM, 0);
}可运行的结果是
我第一设定的文字颜色会印象后面n-1次颜色,只有最后第n次的颜色是我最新的
其他前n-1次设定的颜色都被第一次设定的颜色所覆盖,不知道怎么回事比如;
1234 [红色] 1234[红色] 1234[红色] 1234[红色]
=> 2345[绿色] => 2345[红色] => 2345[红色]
3456[黄色] 3456[红色]
4567[蓝色]
怎前面对文字颜色的设定就全部没有了....
m_strRichEdit += "5678\r\n";
UpdateData(TRUE); 用
CString m_strRichEdit2 = "1234\r\n";
m_richEdit.SetSel(-1,-1);
m_richEdit.ReplaceSel((LPCTSTR)m_strRichEdit2);这样就可以了,避开updateData(FALSE);