65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.86/5 (20投票s)

1999年11月20日

CPOL

4分钟阅读

viewsIcon

289102

downloadIcon

7726

一个CRichEditCtrl的派生类,用于快速处理格式。

  • 下载演示项目 - 40 Kb
  • 下载源代码 - 6 Kb
  • 虽然MFC提供了富文本控件,但它并没有提供一种快速简便的方法来处理格式和RTF代码。CAutoRichEditCtrlCRichEditCtrl的一个派生类。这个新类增加了一些函数,允许您快速添加格式。它还提供了两个函数,让您可以检索CString格式的文本(RTF),以及将RTF格式的CString插入到控件中。

    要在对话框中使用CAutoRichEditCtrl,请遵循以下说明。

    1. 在对话框中插入一个普通的富文本控件。
    2. 使用ClassWizard,将一个类型为CRichEditCtrl的控件变量附加到您的控件上。
    3. 将AutoRichEditCtrl.cpp和AutoRichEditCtrl.h(下面下载)复制到您的源目录,并在对话框的头文件中包含#include "AutoRichEditCtrl.h"。
    4. 在对话框的头文件中,将CRichEditCtrl更改为CAutoRichEditCtrl
    5. 在您的应用程序的InitInstance(CMyApp::InitInstance())中,包含对AfxInitRichEdit()的调用 - 这是所有富文本控件都需要的功能。
    6. 添加使用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

    您可以自由使用/修改此源代码。如果您进行了任何修改或添加,我将非常感谢您告诉我(或者更好的是,通过发布评论让大家知道)。当然,本控件按原样提供,不附带任何明示或暗示的适用性保证。

    希望这对您有所帮助!

    © . All rights reserved.