CAutoRichEditCtrl - 自动化富文本格式化和 RTF 处理






4.86/5 (20投票s)
一个CRichEditCtrl的派生类,用于快速处理格式。
虽然MFC提供了富文本控件,但它并没有提供一种快速简便的方法来处理格式和RTF代码。CAutoRichEditCtrl
是CRichEditCtrl
的一个派生类。这个新类增加了一些函数,允许您快速添加格式。它还提供了两个函数,让您可以检索CString
格式的文本(RTF),以及将RTF格式的CString
插入到控件中。
要在对话框中使用CAutoRichEditCtrl
,请遵循以下说明。
- 在对话框中插入一个普通的富文本控件。
- 使用ClassWizard,将一个类型为
CRichEditCtrl
的控件变量附加到您的控件上。 - 将AutoRichEditCtrl.cpp和AutoRichEditCtrl.h(下面下载)复制到您的源目录,并在对话框的头文件中包含#include "AutoRichEditCtrl.h"。
- 在对话框的头文件中,将
CRichEditCtrl
更改为CAutoRichEditCtrl
。 - 在您的应用程序的InitInstance(
CMyApp::InitInstance()
)中,包含对AfxInitRichEdit()
的调用 - 这是所有富文本控件都需要的功能。 - 添加使用
CAutoRichEditCtrl
函数的界面元素 - 见下文。
将控件插入到您的项目后,您可以添加工具栏按钮、菜单命令或其他元素来调用以下函数
- GetRTF() - 返回一个包含控件文本(包括RTF格式代码)的
CString
。 - SetRTF(CString sRTF) - 参数sRTF是一个RTF格式的CString。调用此函数将插入并格式化字符串。如果传递的CString没有有效的RTF代码,控件将被清空。
- SelectionIsBold() - 如果当前选中文本为粗体,则返回
true
,否则返回false
。 - SelectionIsItalic() - 如果当前选中文本为斜体,则返回
true
,否则返回false
。 - SelectionIsUnderlined() - 如果当前选中文本为下划线,则返回
true
,否则返回false
。 - SetSelectionBold() - 将当前选中文本设置为粗体(注意:这实际上相当于按下Wordpad中的粗体工具栏按钮 - 如果文本不是粗体,它将变为粗体;如果文本已经是粗体,它将移除粗体格式;如果选中的部分文本是粗体,则整个选中文本都将变为粗体;如果没有选中任何内容,格式将更改为粗体,以便用户开始键入时,将以粗体显示)。
- SetSelectionItalic() - 将当前选中文本设置为斜体(请参阅
SetSelectionBold()
中的说明)。 - SetSelectionUnderlined() - 将当前选中文本设置为下划线(请参阅
SetSelectionBold()
中的说明)。 - SetParagraphCenter() - 将当前段落设置为居中。
- SetParagraphLeft() - 将当前段落设置为左对齐。
- SetParagraphRight() - 将当前段落设置为右对齐。
- ParagraphIsCentered() - 如果当前段落居中,则返回
true
,否则返回false
。 - ParagraphIsLeft() - 如果当前段落为左对齐,则返回
true
,否则返回false
。 - ParagraphIsRight() - 如果当前段落为右对齐,则返回
true
,否则返回false
。 - SetParagraphBulleted() - 设置项目符号样式(请参阅
SetSelectionBold()
中的说明)。 - ParagraphIsBulleted() - 如果当前选中文本带项目符号,则返回
true
,否则返回false
。 - SelectColor() - 显示颜色选择对话框,并在用户按下OK时将选中文本设置为所选颜色。
- SetFontName(CString sFontName) - 将选中的字体设置为
sFontName
。 - SetFontSize(int nPointSize) - 将选中文本的大小设置为
nPointSize
。 - GetSelectionFontName() - 返回一个包含选中文本字体名称的
CString
。 - GetSelectionFontSize() - 返回一个包含选中文本字体大小的
long
。 - GetSystemFonts(CStringArray &saFontList) -
saFontList
将包含系统中所有TrueType字体的数组。 - GetCharFormat() - 返回当前选中文本的
CHARFORMAT
结构。
要查看这些函数的示例,请下载演示应用程序。展示如何使用每个函数的源代码位于CRichEdDlg::OnExecute()
中。
这里有一个简单的例子:如果你想让对话框中的一个富文本控件使用格式,你可以创建一个工具栏,上面有标准的粗体、斜体和下划线按钮。只需使用ClassWizard为用户按下按钮时添加一个函数(例如OnBold),然后调用相应的函数(例如m_richedit.SetSelectionBold();
,假设你的富文本控件名为m_richedit
)。这就足以正确设置格式了。
当你想要保存文本时,只需执行CString sText = m_richedit.GetRTF();
,然后按你喜欢的方式保存字符串 - 当你用相同的字符串调用m_richedit.SetRTF(sText);
时,格式将与保存时完全相同。
要感谢 Zafir Anjum 和 Girish Bharadwaj。将RTF字符串流式传输到控件中的代码摘自Zafir的文章,使用StreamIn插入RTF字符串。检索系统中所有字体的代码来源于Girish的文章,Owner Drawn Font Selection ComboBox。
您可以自由使用/修改此源代码。如果您进行了任何修改或添加,我将非常感谢您告诉我(或者更好的是,通过发布评论让大家知道)。当然,本控件按原样提供,不附带任何明示或暗示的适用性保证。
希望这对您有所帮助!