4

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

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

现在我已经妥协了——在执行“高亮”命令后,我只是完全清除了选择。但是,当它在彩色文本上方时,选择颜色不同是理想的。

我怎样才能做到这一点?提前致谢!

4

5 回答 5

4

文本选择的颜色设置与 RichEdit 2.0 和更高版本中的系统选择颜色硬连线在 RichEdit 1.0 中,选择颜色是通过反转背景颜色生成的,所以你有点控制权,但是如果你降级到 1.0,你会失去很多功能。

一个解决方法是在 GetSysColor API 上安装一个进程范围的Detour 挂钩。

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

于 2011-05-21T00:53:13.463 回答
2

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

  • 忽略问题。你想要的东西是不可能的,所以不要想要它。
  • 制作自己的富编辑控件(只是个玩笑,但可以做到)。或者使用其他的。也许闪烁控件具有此功能?
于 2011-05-14T09:50:08.127 回答
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);
}

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

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

于 2011-05-19T18:24:03.863 回答
1

现在我已经妥协了——在执行“highlight”命令后,我完全清除了选择

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

于 2011-05-21T02:02:18.153 回答
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

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

编辑

Rich Edit Control 中的颜色变化

于 2011-05-16T07:51:31.963 回答