在RichEdit中更改所选文本的突出显示颜色

时间:2009-07-16 17:53:54

标签: winapi colors richedit

在选择文本时,如何更改RichEdit控件中所选文本的颜色? SetSysColor()可以做到这一点,但它会全局改变高光颜色。

使用SCF_SELECTION设置CHARFORMAT2,并发送EM_SETCHARFORMAT会改变字体和背景颜色。但只有取消选择相同的范围后才可见。 这不是真的有用,因为一旦取消选择,我希望它再次成为原始颜色。

所以,它是如何真正让我困惑的。

2 个答案:

答案 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都会产生大量问题来处理,这很奇怪。