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

CRichEditCtrl 修订版

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.62/5 (28投票s)

2003 年 4 月 3 日

CPOL

4分钟阅读

viewsIcon

265377

downloadIcon

11127

一个派生的 CRichEditCtrl 类,专注于流式处理和格式的视觉方面。还包括链接格式的使用。

Sample Image - CRichEditCtrlGS.jpg

CRichEditCtrl 修订版

这个 MS-RichEditCtrl 类的继承者主要侧重于支持视觉外观和流式处理功能,如 CStrings、CbyteArrays、资源和文件。尽管像字体或颜色对话框这样的功能很有吸引力,但我并没有将其放入类中,这些功能在示例应用程序中提供了。这是因为我在一个静态库中使用这个类,而 GUI 的访问是受限的。

没关系,我认为在处理 CRichEditCtrl 时有很多内容会对您有所帮助。

源代码附带一个 CHM 格式的帮助文件。它包含了 CRichEditGS 类的文档。您需要 Internet Explorer V4.0 或更高版本才能访问该文件。
感谢 The Helpware Group 的 FAR 工作人员的优秀程序。

要使用此类,请按照常规的向导操作。即
 • 使用 ResourceWizard 创建一个 CRichEditCtrl
 • 使用 ClassWizard 为该控件创建一个成员(而不是其内容)
 • 使用 CopyWizard 将 "RichEditCtrlGS.cpp/h" 文件复制到您的项目目录。
 • 使用 ReplaceWizard 将所有 CRichEditCtrl 的出现替换为 CRichEditCtrlGS。
 • 在 stdafx.h 或您的对话框/窗体/视图头文件中包含头文件 "RichEditCtrlGS.h"。抱歉没有 IncludeWizard,所以请使用键盘。

首先,不要担心如何绑定到 RichEdit 版本 2 或版本 3。这由操作系统中的一些魔法来完成。
示例程序是在 Visual C++ Service Pack 5 下开发的,在 WIN98SE 和 W2K 上运行良好。尽管链接在 WIN98SE 中的视觉外观不是我期望的那样。
所以,如果您在过去几年中更新了操作系统和编译器,那么您很可能可以使用 Richedit 版本 2.0 的功能。

您可以将 CRichEditCtrl 用作静态控件,当您禁用此窗口时。您只需流式处理资源即可获得丰富的文本格式功能。
怎么做?好吧,写一段丰富的格式文本,并将其保存为文件到您的 res 目录(为此请使用示例应用程序)。
之后,打开资源编辑器。告诉它导入新资源。选择您新创建的文件,当编辑器询问资源类型时,为其命名为 RTF。
在您的应用程序代码中,您应该将该 CRichEditCtrl 的背景颜色设置为 COLOR_BTNFACE。然后调用您派生的 CRichEditCtrl 类的资源流式处理函数(如果您使用我的,则为 SetRTF)。
请记住,禁用的窗口不会接收或发送任何消息!所以您永远不会收到用户悬停在链接上的通知。

虽然操作系统提供了支持,但类向导不提供支持。所以,如果您想要对 EN_LINK 消息通知的支持,例如,告诉类向导您需要针对 EN_PROTECTED 的帮助。让类向导完成工作后,加载您的源文件并将所有 "protected" 出现更改为 "link"。请记住在这种情况下保留大写字母。然后进行编码。

请参阅示例应用程序了解其工作原理。
请参阅源代码了解必须做什么才能使其正常工作。

FGAs

又名常见问题解答

通用目的
 • 我不知道。
 • 是的。
 • 不。
 • 请发送电子邮件给我,提供更多详细信息。
 • 请仔细查看提供的示例的源代码。

具体的 (Specific)
 • 链接部分只能由应用程序设置。它不会被保存,尽管会被复制。如果您只需要用于互联网目的,请考虑向您的控件发送 EM_AUTOURLDETECT 消息。请记住,在这种情况下,您将丢失程序设置的所有链接位。您仍然必须完成 EN_LINK 通知消息的硬编码部分。
 • 实际上它工作正常。奇怪的行为来自这样一个事实:字符的格式样式是标志,而段落对齐是枚举。因此,无法确定 3(=居中)是由 3 | 0 还是 1(=左)| 2(=右)或 2 | 1 或 0,1,2,3 的任何或组合产生的。这就是为什么当您的选择跨越一个以上的段落时,段落的对齐方式会被错误地标记。教训:永远不要使用枚举值。
 • 如果您使用数据库,其中长二进制数据绑定到 CByteArray 变量,这会非常方便。
 • 根据微软的说法,两端对齐将不会显示,但会存储。这是真的。同样根据微软的说法,文本将显示为左对齐。我曾经看到它显示为居中。

所以,如果您有问题,请先查看 FGA 部分。答案可能已经在那儿了。

VC++ 和 MSDN 提供的 wordpad 源代码也很有帮助。

G. Steudtel

© . All rights reserved.