基本上,我想在彩色文本上方的地方更改标准 RichEdit 选择颜色。
我正在 RichEdit 控件中实现“突出显示”功能(如黄色标记)。现在,当我在所选文本上应用高亮显示时,视觉上没有任何变化,因为选择保持在原位并且它覆盖了字符颜色。这很糟糕,因为用户应该得到一些视觉反馈,表明已应用了突出显示。
现在我已经妥协了——在执行“高亮”命令后,我只是完全清除了选择。但是,当它在彩色文本上方时,选择颜色不同是理想的。
我怎样才能做到这一点?提前致谢!
文本选择的颜色设置与 RichEdit 2.0 和更高版本中的系统选择颜色硬连线。在 RichEdit 1.0 中,选择颜色是通过反转背景颜色生成的,所以你有点控制权,但是如果你降级到 1.0,你会失去很多功能。
一个解决方法是在 GetSysColor API 上安装一个进程范围的Detour 挂钩。
WPF4 版本的 RichTextBox 中有一个 SelectionBrush 属性,可用于更改选择外观。不确定您的项目要求是否允许您在对话框上托管 WPF 控件。
我不认为这可以自动完成,因为 Windows 的富编辑控件不提供此类功能。您有 2 个选项:
一个快速测试应用程序,我能够修改这些颜色,但是需要仔细考虑才能使其按预期工作。
首先,您可能必须更改对话框资源以将控件标识为较旧的 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上找到有关此功能的文档:
现在我已经妥协了——在执行“highlight”命令后,我完全清除了选择
我只是想补充一点,当您突出显示某种颜色/颜色时,即使是 Microsoft Word 也会取消选择文本。从玩起来,这感觉是最直观的,因为通常你不想做任何其他事情,你会立即取消选择文本。
虽然我无法正确理解您的问题,但我猜您想更改所选文本的颜色。以下链接在 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
如果我的回答对您有帮助,请告诉我。
编辑