基本上,我想在有色文字上方的地方更改标准RichEdit选择颜色。
我正在RichEdit控件中实现“突出显示”功能(如黄色标记)。 现在,当我在所选文本上应用高亮显示时,没有任何内容在视觉上发生变化,因为选择保留在原位并覆盖了字符颜色。这很糟糕,因为用户应该获得一些已应用突出显示的视觉反馈。
现在我已经解决了妥协 - 执行“突出显示”命令后,我只是完全清除了选择。但是当它在彩色文本之上时,选择颜色会有所不同是理想的。
我该怎么做?提前谢谢!
答案 0 :(得分:4)
文本选择的颜色设置为hardwired to the system selection color in RichEdit 2.0 and higher。 In 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的丰富编辑控件不提供此类功能。您有两个选择:
答案 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
如果我的回答对你有帮助,请告诉我。
修改强>