Я хочу добавить цветную текстовую строку в элемент управления RichEdit. Но я столкнулся с проблемой, что цветовой обмен не ограничивается текстом, который я выбрал. Что я делаю:
получить текущий курсор pos -> вставить текст -> получить курсор pos -> выбрать диапазон -> цвет его -> снять выбор
По какой-то причине, похоже, также меняется цвет по умолчанию. Я попытался сохранить старый CHARFORMAT
и восстановить его (SCF_DEFAULT
и SCF_SELECTION
с последним символом) после того, как я покрасил линию, но это не сработало. Я что-то упускаю?
Richedit изменить цвет выделения
Я получил 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);
}
С моей точки зрения вы ничего не изменили, за исключением того, что у вас есть хорошо инициализированная структура. – xMRi