【问题标题】:Change highlight color of selected text in RichEdit更改 RichEdit 中选定文本的突出显示颜色
【发布时间】:2020-10-07 00:59:25
【问题描述】:

如何在 RichEdit 控件中更改选定文本的颜色,同时选择文本? SetSysColor() 可以做到,但这会全局更改 Highlight-color。

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

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

【问题讨论】:

    标签: winapi colors richedit


    【解决方案1】:

    简单地继承它(很久以前发布在谷歌群组上,C/Winapi 代码)

    【讨论】:

    • 非 MFC 项目...但是您知道 MFC 是如何做到这一点的吗?
    【解决方案2】:

    您可以开始发送选择更改的事件消息;

    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 会产生大量需要处理的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-06
      • 2016-03-29
      • 1970-01-01
      • 2017-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多