2

如何在选择文本时更改 RichEdit 控件中选定文本的颜色?SetSysColor() 可以做到这一点,但这会全局更改突出显示颜色。

使用 SCF_SELECTION 设置 CHARFORMAT2 并发送 EM_SETCHARFORMAT 确实会更改字体和背景颜色。但只有在您取消选择相同范围后才可见。这并不是很有帮助,因为一旦取消选择某些内容,我希望它再次成为原始颜色。

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

4

2 回答 2

0

简单地对其进行子类化(很久以前在谷歌群组上发布,C/Winapi 代码)

于 2009-07-18T17:43:44.150 回答
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 会产生大量需要处理的问题。

于 2020-10-06T11:30:50.113 回答