在选择文本时,如何更改RichEdit控件中所选文本的颜色? SetSysColor()可以做到这一点,但它会全局改变高光颜色。
使用SCF_SELECTION设置CHARFORMAT2,并发送EM_SETCHARFORMAT会改变字体和背景颜色。但只有取消选择相同的范围后才可见。 这不是真的有用,因为一旦取消选择,我希望它再次成为原始颜色。
所以,它是如何真正让我困惑的。
答案 0 :(得分:0)
简单地将其分类(很久以前在google groups上发布,C / Winapi代码)
答案 1 :(得分:0)
您可以开始发送事件消息以进行选择更改;
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都会产生大量问题来处理,这很奇怪。