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

时间:2011-05-05 09:56:06

标签: c++ winapi text richedit

基本上,我想在有色文字上方的地方更改标准RichEdit选择颜色。

我正在RichEdit控件中实现“突出显示”功能(如黄色标记)。 现在,当我在所选文本上应用高亮显示时,没有任何内容在视觉上发生变化,因为选择保留在原位并覆盖了字符颜色。这很糟糕,因为用户应该获得一些已应用突出显示的视觉反馈。

现在我已经解决了妥协 - 执行“突出显示”命令后,我只是完全清除了选择。但是当它在彩色文本之上时,选择颜色会有所不同是理想的。

我该怎么做?提前谢谢!

5 个答案:

答案 0 :(得分:4)

文本选择的颜色设置为hardwired to the system selection color in RichEdit 2.0 and higherIn RichEdit 1.0, the selection color is generated by inversing the background color,所以你有一些控制权,但如果你降级到1.0,你会失去很多功能。

解决方法是在GetSysColor API上安装流程范围的Detour hook

RichFxtBox的WPF4版本中有一个SelectionBrush属性,可用于更改选择外观。不确定您的项目要求是否允许您在对话框中托管WPF控件。

答案 1 :(得分:2)

我不认为这可以自动完成,因为Windows的丰富编辑控件不提供此类功能。您有两个选择:

  • 忽略此问题。你想要的是不可能的,所以不要希望它。
  • 制作自己的丰富编辑控件(只是一个笑话,但可以完成)。或者使用其他一些。也许scintilla控件具有此功能?

答案 2 :(得分:1)

快速测试应用程序,我能够修改这些颜色,但需要仔细考虑才能使其按预期工作。

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

完成后,您可以使用CRichEditCtrl::SetSelectionCharFormat功能修改选择颜色(实际上,显着更多的选择属性)。

我做的简单测试是创建一个新的基于Dialog的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);
}

一旦这个处理程序到位,在对话框中按OK将填充富编辑控件,选择前17个字符并更改选择突出显示颜色。

您可以找到有关此功能的文档on MSDN:

答案 3 :(得分:1)

  

现在我已经达成了妥协 - 在执行“突出显示”命令后,我只清楚了   完全选择

我只想补充一点,即使Microsoft Word在突出显示某种颜色/颜色时也会取消选择该文本。从玩起来,这感觉最直观,因为通常你不想做任何其他事情,你只需要立即取消选择文本。

答案 4 :(得分:0)

虽然我无法正确理解您的问题,但我猜您想要更改所选文字的颜色。以下链接在MFC中,因此您需要将其更改为Windows SDK代码,但它将帮助您入门。

http://social.msdn.microsoft.com/Forums/en-US/vcmfcatl/thread/860b0295-9144-4af6-9ffc-42c2b39a3f50/

http://www.go4expert.com/forums/showthread.php?t=320

如果我的回答对你有帮助,请告诉我。

修改

Color change in Rich Edit Control