如何在RichEdit控件中更改选择颜色?

4
基本上,我想在已经有颜色的文本上方更改标准RichEdit选择颜色。 我正在RichEdit控件中实现“高亮”功能(如黄色记号笔)。 当我对所选文本应用高亮时,没有任何视觉变化,因为选择保持不变并覆盖字符颜色。 这很糟糕,因为用户应该得到一些视觉反馈,表明已应用高亮。 现在,我已经妥协了 - 在执行“高亮”命令后,我只是清除了整个选择。 但是,当选择在彩色文本上方时,最好将选择颜色设置为不同的颜色。 我该怎么做? 提前感谢!

很抱歉,代码在这里无法帮助,我想知道是否有可能完成它,以及如何完成。 - Alex Jenter
循环结构类似于问题“在RichEdit中更改所选文本的高亮颜色”的解答,详见http://stackoverflow.com/questions/1139234/change-highlight-color-of-selected-text-in-richedit。 - Sheng Jiang 蒋晟
5个回答

4

2

我认为这不能自动完成,因为Windows的富文本编辑控件不提供此功能。你有两个选择:

  • 忽略这个问题。你所希望的是不可能实现的,所以不要想了。
  • 制作自己的富文本编辑控件(只是开个玩笑,但是可以完成)。或使用其他控件。也许scintilla控件具有此功能?

之前我创建了自己的彩色富文本编辑框,我可以证明它是可行的...但可能并不值得这样做。现在,如果你使用C#... :) - Gustavo Mori
通过发送EM_HIDESELECTION并手动模拟字符格式化来实现选择,这是否可能? - Alex Jenter
1
据我所知,EM_HIDESELECTION仅在控件失去焦点时隐藏选择。这意味着如果您想走这条路,您必须绕过一些东西。最终结果可能会与现有用户对富文本控件的体验产生冲突。 - Dialecticus

1
现在我已经妥协了 - 在执行“高亮”命令后,我只是完全清除选择。
我只想补充一点,即使是微软的Word在突出显示某种颜色时也会取消选择文本。通过玩耍,这感觉最直观,因为通常你也不想做其他任何事情,而且你会立即取消选择文本。

1

进行了一个快速的测试应用程序,我能够修改这些颜色,但是需要仔细考虑才能使其按照您的预期工作。

首先,您可能需要更改对话框资源,将控件标识为旧的RICHEDIT。在Visual Studio 2010中,我的对话框生成的.rc文件将控件标识为“RichEditCtrl20A”,当控件被标识为这样时,我无法对选择颜色进行任何重大更改。将控件类型更改为“RICHEDIT”允许我对选择颜色进行更改,而不会感觉到任何功能上的损失。您必须在文本编辑器中修改.rc文件,找到您的RichEdit控件实例并进行修改。

完成后,您可以使用CRichEditCtrl::SetSelectionCharFormat函数修改选择颜色(实际上,还有更多的选择属性)。

我进行的简单测试是创建一个新的基于对话框的MFC应用程序,向其中添加一个富文本编辑控件,按照上述说明修改RC文件,并添加以下OnOK()处理程序:

void CTestMFCDlg::OnBnClickedOk()
{
   m_rec.SetWindowText("This is a test of stuff");

   m_rec.SetFocus();

   CHARRANGE cr;
   cr.cpMin = 0;
   cr.cpMax = 16;

   m_rec.SetSel(cr);

   CHARFORMAT2A cf;
   m_rec.GetSelectionCharFormat(cf);

   cf.dwEffects = 0;
   cf.dwMask = CFM_BACKCOLOR | CFM_COLOR | CFM_FACE;
   cf.crBackColor = 0;
   cf.crTextColor = RGB(15, 15, 255);
   strcpy(cf.szFaceName, "Times New Roman");

   m_rec.SetSelectionCharFormat(cf);
}

一旦安装了此处理程序,单击对话框中的“确定”按钮将填充富文本控件,选择前17个字符并更改选择突出显示颜色。

您可以在MSDN上找到有关此函数的文档。


0

不好意思,这不是我想要的。很抱歉没有表述清楚。我想要更改标准选择高亮颜色,在高亮文本的地方。 - Alex Jenter
Alex,你是想把选中文本时的蓝色改成你自己喜欢的颜色吗?我已经在我的答案中加入了一个链接,也许你可以看一下。 - Sujay Ghosh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接