如何在选择文本时更改 RichEdit 控件中选定文本的颜色?SetSysColor() 可以做到这一点,但这会全局更改突出显示颜色。
使用 SCF_SELECTION 设置 CHARFORMAT2 并发送 EM_SETCHARFORMAT 确实会更改字体和背景颜色。但只有在您取消选择相同范围后才可见。这并不是很有帮助,因为一旦取消选择某些内容,我希望它再次成为原始颜色。
所以,它是如何真正做到的让我感到困惑。
简单地对其进行子类化(很久以前在谷歌群组上发布,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 会产生大量需要处理的问题。