Изменить цвет выделения выделенного текста в RichEdit
Как изменить цвет выделенного текста в элементе управления RichEdit во время выделения текста? SetSysColor() может сделать это, но это изменяет цвет подсветки глобально.
Установка CHARFORMAT2 с помощью SCF_SELECTION и отправка EM_SETCHARFORMAT изменяет шрифт и цвет фона. Но отображается только после отмены выбора того же диапазона. Это не очень полезно, так как я хочу, чтобы он снова стал оригинальным цветом, когда что-то отменено.
Так, как это действительно сделано, озадачивает меня.
1 ответ
Просто создайте подкласс (он был опубликован давно в группах Google, код C/Winapi)
Вы можете начать отправку сообщений о событиях для изменения выбора;
SendMessageW(hWndEdit, EM_SETEVENTMASK, 0, ENM_SELCHANGE);
а затем обработайте сообщение следующим образом;
case WM_NOTIFY:
switch (((LPNMHDR)lParam)->code)
{
case EN_SELCHANGE:
SendMessageW(hWndEdit, EM_SETEVENTMASK, 0, ENM_NONE);
SendMessageW(hWndEdit, EM_SETCHARFORMAT, SCF_ALL, (LPARAM)&format);
SendMessageW(hWndEdit, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&sformat);
SendMessageW(hWndEdit, EM_HIDESELECTION, 1, 0);
SendMessageW(hWndEdit, EM_SETEVENTMASK, 0, ENM_SELCHANGE);
break;
}
Однако это вызовет некоторое мерцание в случае быстрого изменения выбора. Странно, как Win32 API создает множество проблем, с которыми приходится иметь дело, когда вы пытаетесь что-то настроить.