我想向RichEdit控件添加一个彩色文本行。但我面临的问题是,颜色的改变并不局限于我选择的文本。我所做的是:
获取当前光标pos ->插入文本->获取光标pos ->选择范围->颜色它->取消选择
由于某些原因,它似乎也改变了默认颜色。在对行着色后,我试图保存旧的CHARFORMAT并恢复它(SCF_DEFAULT和SCF_SELECTION,最后一个字符),但这不起作用。我是不是遗漏了什么?
我获得了一个RichEdit 2.0和以下函数:
hEdit_Console = CreateWindow(RICHEDIT_CLASS, "",
WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOVSCROLL | ES_MULTILINE | ES_READONLY | WS_VSCROLL,
10, 100, 260, 120, hWnd, NULL, ((LPCREATESTRUCT) lParam)->hInstance, NULL);
SendMessage(hEdit_Console, WM_SETFONT, (LPARAM)GetStockObject(DEFAULT_GUI_FONT), TRUE);void AddInfo2(HWND con, char* text)
{
CHARFORMAT cf;
int start, stop;
memset( &cf, 0, sizeof cf );
cf.cbSize = sizeof cf;
cf.dwMask = CFM_COLOR;
cf.crTextColor = RGB(51, 204, 51);
SendMessage(con, EM_SETSEL, -1, -1);
start = SendMessage(con, WM_GETTEXTLENGTH, 0, 0);
SendMessage(con, EM_REPLACESEL, FALSE, (LPARAM)text);
stop = SendMessage(con, WM_GETTEXTLENGTH, 0, 0);
SendMessage(con, EM_SETSEL, start, stop);
SendMessage(con, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf);
SendMessage(con, EM_SETSEL, -1, -1);
}发布于 2013-10-16 06:48:27
我找到了一个解决办法,至少对我来说是这样。当我第一次尝试保存/备份和还原旧的CHARFORMAT时,我没有为CHARFORMAT cf_old指定CFM_COLOR。现在我用:
SendMessage(con, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf_old);
cf_old.dwMask = CFM_COLOR;
SendMessage(con, EM_SETSEL, -1, -1);
SendMessage(con, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf);
SendMessage(con, EM_REPLACESEL, FALSE, (LPARAM)text);
SendMessage(con, EM_SETSEL, -1, -1);
SendMessage(con, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf_old);这也解释了我第一次尝试失败的原因。似乎每次在使用插入符号之前向RichEdit添加第一个字符的CHARFORMAT。
发布于 2013-10-15 11:38:23
就我所读的文档 dwEffects而言,必须将其设置为CFE_AUTOCOLOR或其他有效值。
https://stackoverflow.com/questions/19378894
复制相似问题