本节将讨论以下主题。
Rich Edit 的版本
富编辑控件的原始规范Microsoft Rich Edit 1.0;当前规范Microsoft Rich Edit 4.1。 每个版本的富编辑都是前一个版本的超集,只是只有 Microsoft Rich Edit 1.0 的亚洲版本具有垂直文本选项。 在创建富编辑控件之前,应调用 LoadLibrary 函数来验证已安装哪个版本的 Microsoft Rich Edit。
下表显示了哪个 DLL 对应于哪个版本的 Rich Edit。 请注意,文件的名称未从版本 2.0 更改为版本 3.0。 这允许将版本 2.0 升级到版本 3.0,而不会中断现有代码。
| 富编辑版本 | DLL | Window 类 |
|---|---|---|
| 1.0 | Riched32.dll | RICHEDIT_CLASS |
| 2.0 | Riched20.dll | RICHEDIT_CLASS |
| 3.0 | Riched20.dll | RICHEDIT_CLASS |
| 4.1 | Msftedit.dll | MSFTEDIT_CLASS |
Rich Edit Version 1.0
Microsoft Rich Edit 1.0 包含以下功能。
| 功能 / 特点 | Description |
|---|---|
| 文本输入和选择 | 大多数是标准(系统编辑控件)选择和文本输入。 选择栏支持(选择栏是单击时每个段落左侧的未标记区域,选择行)。 自动换行和自动选择选项。 单键、双键和三键选择。 |
| ANSI (单字节字符集 (SBCS) 和多字节字符集 (MBCS)) 编辑 | 但是,没有 Unicode 编辑。 |
| 基本字符/段落格式设置属性集 | 请参阅 CHARFORMAT 和 PARAFORMAT。 |
| 字符格式属性 | 字体名称和大小、粗体、斜体、纯下划线、删除线、受保护、链接、偏移量和文本颜色。 |
| 段落格式属性 | 开始缩进、右缩进、后续行偏移量、项目符号、对齐方式(左、居中、右)和制表符。 |
| 向前查找 | 包括不区分大小写和匹配全字选项。 |
| 基于消息的接口 | 几乎是系统编辑控制消息集的超集加上两个接口 ,即 IRichEditOle 和 IRichEditOleCallback。 |
| 嵌入对象 | 需要基于 IRichEditOle 和 IRichEditOleCallback 接口的客户端协作。 |
| 右键菜单支持 | 使用 IRichEditOleCallback 接口。 |
| 拖放编辑 | 支持拖放编辑。 |
| Notifications | WM_COMMAND 发送到客户端的消息以及许多其他消息。 这是常见控制通知的超集。 |
| 单级撤消/重做 | 行为类似于系统编辑控件。 选择 “撤消 ”将反转最后一个作,然后该作将成为新的 重做 作。 |
| 简单垂直文本 | (仅限亚洲版本)。 |
| 输入法编辑器 (IME) 支持 | (仅限亚洲版本)。 |
| 使用打印机指标进行 WYSIWYG 编辑 | Microsoft WordPad 尤其需要此功能。 |
| 剪切/复制/粘贴/StreamIn/StreamOut | 具有纯文本(CF_TEXT)或 RTF 格式(RTF),且不包含对象。 |
| C 代码库 | 该代码采用 C 编写,可提供坚实且通用的基础。 |
| 不同脚本的不同版本 | Microsoft Rich Edit 1.0 解决了不同版本的本地化问题。 |
Rich Edit Version 2.0
Microsoft Rich Edit 2.0 合并了多个附加功能,例如对 Unicode 和亚洲语言的支持、多级撤消、组件对象模型(COM)接口以及许多 UI 增强功能。
Microsoft Rich Edit 2.0 除了 Microsoft Rich Edit 1.0 提供的功能外,还包括以下功能。
| 功能 / 特点 | Description |
|---|---|
| Unicode | Unicode 简化了处理国际文本的工作。 但是,需要努力保持与现有非 Unicode 文档的兼容性,即能够转换为非 Unicode 纯文本和富文本或从非 Unicode 纯文本转换。 |
| 一般国际支持 | 常规换行算法(Kinsoku 规则的扩展)、简单的字体链接、键盘字体切换。 |
| 亚洲支持 | 2 级(对话框)和 3(内联)在 IME 中受支持。 |
| 查找/查找向下支持 | 支持向前和向后搜索。 |
| 双向支持 | 这包含在 Microsoft Rich Edit 2.1 中 |
| 多级撤消 | 可扩展的撤消体系结构允许客户端参与应用程序范围的撤消模型。 |
| Magellan 鼠标支持 | 这是带有滚动滚筒的鼠标。 |
| 双字体支持 | 当活动字体不适合当前键盘时,键盘可以自动切换字体,例如,时代新罗马语中的汉字字符。 |
| 智能字体应用 | 字体更改请求不适用于亚洲字符的西方字体。 |
| 改进的显示 | 在同一行上出现多个字体时,将使用屏幕外位图。 例如,这允许不切碎单词的最后一个字母冷。 |
| 透明度支持 | 同样在无窗口模式下。 |
| 系统选择颜色 | 用于选择文本。 |
| 自动 URL 识别 | 可以检查多个 URL 格式(例如 http:) |
| Microsoft Word 编辑 UI 兼容性 | 选择、光标键盘语义。 |
| Word 标准 EOP | 段落结束标记(CR)还可以处理回车/换行符(CR/LF)(回车符,换行符)。 |
| 纯文本和富文本功能 | 单字符格式和单段落格式。 |
| 单行和多行控件 | 在第一个段落末尾截断,没有字包。 |
| 快捷键 | 支持快捷键。 |
| 密码窗口样式 | 密码编辑控件通过 EM_GETPASSWORDCHAR 和 EM_SETPASSWORDCHAR提供。 |
| 可缩放的体系结构 | 减小实例大小。 |
| 无窗口作和接口 | 这通过 ITextHost 和 ITextServices 接口提供。 |
| COM 双接口 | 文本对象模型 (TOM) 接口。 |
| CHARFORMAT2 | 添加了字体粗细、背景色、区域设置标识符、下划线类型、上标和下标(除偏移量外),禁用效果。 仅对于 RTF 往返,增加了字母之间的间距,在字母之间增加大小,以对字符对、动画文本类型、各种效果:字体阴影/轮廓、所有大写字母、小帽、隐藏、浮雕、印记和修订。 |
| PARAFORMAT2 | 在前后添加空格和 Word 行距。 对于仅 RTF 往返,添加了底纹粗细/样式、编号起始/样式/制表符、边框空间/宽度/边、选项卡对齐/标题、各种 Word 段落效果:RTL 段落、keep-next、分页符、无行编号、no-widow-control、do-not-hyphenate、并排。 |
| 更多 RTF 往返 | 所有 Word FormatFont 和 FormatParagraph 属性。 |
| 代码稳定性和稳定性 | 示例:参数和对象验证、函数固定、重新进入防护、对象稳定。 |
| 强测试基础结构 | 包括广泛的回归测试。 |
| 改善性能 | 较小的工作集、更快的加载和重新播放时间等。 |
| C++基本代码 | 代码以 C++ 编写,该代码提供了构建 Microsoft Rich Edit 3.0 的坚实基础。 |
除了一些例外情况,Microsoft Rich Edit 2.0 使用与 Microsoft Rich Edit 1.0 相同的函数、结构和消息。 但是,请注意以下差异:
Microsoft Rich Edit 1.0 窗口类的名称为 RichEdit。 Microsoft Rich Edit 2.0 分别具有 ANSI 和 Unicode 窗口类 RichEdit20A 和 RichEdit20W 。 若要指定适当的富编辑窗口类,请使用 Richedit.h 文件根据 UNICODE 编译标志的定义定义的RICHEDIT_CLASS常量。
在 Microsoft Rich Edit 2.0 中,如果创建 Unicode 富编辑控件(需要 Unicode 短信),则必须仅在发送到控件的任何窗口消息中指定 Unicode 数据。 同样,如果创建 ANSI 富编辑控件,则仅发送 ANSI 或双字节字符集(DBCS)数据。 可以使用 IsWindowUnicode 函数来确定富编辑控件是否使用 Unicode 短信。 请注意,富编辑 COM 接口使用 Unicode 文本,除非它们遇到代码页参数。
Microsoft Rich Edit 1.0 使用了段落标记的 CR/LF 字符组合。 Microsoft Rich Edit 2.0 仅使用回车符(“\r”)。 Microsoft Rich Edit 3.0 仅使用回车符,但可在此方面模拟 Microsoft Rich Edit 1.0。
Microsoft Rich Edit 2.0 引入了以下新消息。
Message Description EM_AUTOURLDETECT 启用或禁用自动 URL 检测。 EM_CANREDO 确定重做队列中是否有任何作。 EM_GETIMECOMPMODE 检索当前输入法编辑器 (IME) 模式。 EM_GETLANGOPTIONS 检索 IME 和亚洲语言支持的选项。 EM_GETREDONAME 检索重做队列中下一作的类型名称。 EM_GETTEXTMODE 检索文本模式或撤消级别。 EM_GETUNDONAME 检索撤消队列中下一作的类型名称。 EM_REDO 重做队列中的下一个作。 EM_SETLANGOPTIONS 设置 IME 和亚洲语言支持的选项。 EM_SETTEXTMODE 设置文本模式或撤消级别。 EM_SETUNDOLIMIT 设置撤消队列中的最大作数。 EM_STOPGROUPTYPING 停止将连续键入作分组到当前撤消作中。 Microsoft Rich Edit 2.0 引入了以下新结构。
结构 Description CHARFORMAT2 包含有关字符格式的信息。 PARAFORMAT2 包含有关段落格式的信息。 以下消息仅在 Microsoft Rich Edit 1.0 的亚洲语言版本中受支持。 任何更高版本的 Rich Edit 都不支持它们。
Rich Edit Version 3.0
Microsoft Rich Edit 3.0 是单个、可缩放、全球范围的 DLL,在小型包中提供与 Word 的高性能和兼容性。 Microsoft Rich Edit 3.0 的新功能包括更丰富的文本、缩放、字体绑定、更强大的 IME 支持以及丰富的复杂脚本支持(双向、索引和泰文)。
Microsoft Rich Edit 3.0 除了 Rich Edit 版本 2.0 提供的功能外,还包括以下功能。
| 功能 / 特点 | Description |
|---|---|
| 缩放 | 缩放因子按比率给出。 |
| 段落编号(单级) | 数字、上下字母或罗马数字。 |
| 简单表 | 可以删除和插入行,但不能在单元格内调整大小或换行。 启用高级版式(见 EM_GETTYPOGRAPHYOPTIONS),Microsoft Rich Edit 3.0 可以对齐居中列或右刷新列,并包括小数。 单元格由制表符模拟,因此文本制表符和回车符将替换为空白。 |
| 普通样式和标题样式 | EM_SETPARAFORMAT和文本对象模型(TOM)接口支持内置普通样式和标题样式 1 到 9。 |
| 更多下划线类型 | 添加了虚线、虚线点、短划线点和下划线。 |
| 下划线着色 | 带下划线的文本可以用 15 个文档选项之一来标记下划线颜色。 |
| 隐藏文本 | 由CHARFORMAT2属性标记。 方便往返(写出文件读取的内容)通常不应显示的信息。 |
| 更多默认热键 | 这些热键的功能与 Word 中的键相同。 例如,欧洲口音死键(仅限美国键盘)。 数字热键 (Ctrl+L) 循环使用可用编号选项,从项目符号开始。 |
| HexToUnicode IME | 允许用户使用热键在十六进制和 Unicode 之间转换。 |
| 智能引号 | 对于美国键盘,此功能通过 Ctrl+Alt+' 打开和关闭。 |
| 软连字符 | 对于纯文本,请使用0xAD。 对于 RTF,请使用 -. |
| 斜体游标 | 此外,鼠标光标在 URL 上时更改为手部。 |
| 高级版式选项 | Microsoft Rich Edit 3.0 可以使用高级版式选项进行换行和显示(请参阅 EM_GETTYPOGRAPHYOPTIONS)。 添加了此优雅的选项主要用于促进处理复杂脚本(双向、索引和泰文)。 此外,简单脚本也发生了许多改进。 示例包括:
|
| 复杂脚本支持 | Microsoft Rich Edit 3.0 支持双向(带阿拉伯语和/或希伯来语的文本与其他脚本混合)、索引(印度脚本(如 Devangari)和泰国文本。 为了支持这些复杂的脚本,将使用高级版式和 Uniscribe 组件。 |
| 字体绑定 | Microsoft Rich Edit 3.0 将自动为明显不属于当前字符集标记的字符选择适当的字体。 为此,将字符集分配给文本运行并将字体与这些字符集相关联。 有关详细信息,请参阅 字体绑定。 |
| 特定于字符集的纯文本读/写选项 | 这允许使用一个字符集读取文件,并使用其他字符集进行写入。 |
| UTF-8 RTF | 建议进行剪切、复制和粘贴作。 此文件格式比普通 RTF 更紧凑,更快且与 Unicode 兼容。 |
| Microsoft Office 9 IME 支持(IME98) | 这种更强大的 IME 功能已分离到独立的模块中。 功能包括:
|
| 活动输入法管理器 (IMM) 支持 | 用户可以调用活动 IMM 对象,使用户能够在美国系统上输入亚洲字符。 |
| HexToUnicode 支持 | 用户可以使用热键在十六进制表示法和 Unicode 之间转换。 |
| 更多 RTF 往返 | 从文件中读取的 RTF 文本将完整地写回。 |
| 改进了 1.0 兼容模式 | Microsoft Rich Edit 3.0 可以模拟 Microsoft Rich Edit 1.0 行为。 例如,可以在 MBCS 和 Unicode 字符位置 (cp) 映射之间更改。 |
| 冻结控制增加 | 可以通过多个 API 调用冻结显示,然后取消冻结以显示更新。 |
| 增加撤消控制 | 撤消可以暂停和恢复(IME 要求)。 |
| 增加/减小字号 | 将字号增加到六个标准值之一(12、28、36、48、72 和 80 磅)。 |
Rich Edit 版本 4.1
Microsoft Rich Edit 4.1 的窗口类MSFTEDIT_CLASS。 Microsoft Rich Edit 4.1 的新功能包括连字符、页面旋转和文本服务框架 (TSF) 支持。
除了 Rich Edit 版本 3.0 提供的功能之外,Microsoft Rich Edit 4.1 还包括以下功能。
| 功能 / 特点 | Description |
|---|---|
| 连字符 | 通过以下 API 支持连字符: HyphenateProc、 EM_SETHYPHENATEINFO 和 EM_GETHYPHENATEINFO。 |
| 页面旋转 | 通过EM_SETPAGEROTATE和EM_GETPAGEROTATE支持从上到下和从上到下布局。 |
| 文本服务框架支持 |
|
| 其他 IME 支持 |
|
| 其他 EM_SETEDITSTYLE 设置 | 除了 TSF 设置之外,还有排除 IME、设置双向文本流、使用草稿模式字体等的新设置。 |
| 其他 EM_SETCHARFORMAT 设置 | 新的标志允许客户端设置给定 LCID 或字符集的默认字体和字号,以设置控件的默认字体,以防止键盘切换以匹配字体等。 |
| 将输入限制为 ANSI 文本 | 在EM_SETTEXTMODE中使用TM_SINGLECODEPAGE可防止 Unicode 输入进入 Rich Edit 控件。 |
| 不支持的 RTF 关键字通知 | 当存在不支持的 RTF 关键字时,EN_LOWFIRTF会警告应用程序。 |
| 其他语言支持 | 其他语言包括亚美尼亚语、迪维希语、泰卢古语和其他语言。 |
| 改进了表支持 | 功能包括:在单元格内包装、通过 RTF 改进处理以及改进的导航。 |
| ES_VERTICAL | 支持 ES_VERTICAL 窗口样式。 |
| WM_UNICHAR 支持 | 若要向 ANSI 窗口发送或发布 Unicode 字符,请使用 WM_UNICHAR。 它等效于 WM_CHAR,但它使用 (UTF)-32。 |
不支持的编辑控件功能
丰富的编辑控件支持多行编辑控件的大多数功能,但不支持所有功能。 本部分列出了富编辑控件 不支持 的编辑控件消息和窗口样式。
以下消息由编辑控件处理, 但不是 由丰富的编辑控件处理。
| 不支持的消息 | 注释 |
|---|---|
| EM_FMTLINES | 不支持。 |
| EM_GETHANDLE | 丰富的编辑控件不会将文本存储为简单的字符数组。 |
| EM_GETIMESTATUS | 不支持。 |
| EM_GETMARGINS | 不支持。 |
| EM_SETHANDLE | 丰富的编辑控件不会将文本存储为简单的字符数组。 |
| EM_SETIMESTATUS | 不支持。 |
| EM_SETMARGINS | Microsoft Rich Edit 3.0 中受支持。 |
| EM_SETRECTNP | 不支持。 |
| EM_SETTABSTOPS | 改用 EM_SETPARAFORMAT 消息。 Microsoft Rich Edit 3.0 中受支持。 |
| WM_CTLCOLOR | 改用 EM_SETBKGNDCOLOR 消息。 |
| WM_GETFONT | 改用 EM_GETCHARFORMAT 消息。 |
以下窗口样式用于多行编辑控件,但不适用于丰富的编辑控件: ES_LOWERCASE、 ES_UPPERCASE和 ES_OEMCONVERT。
丰富编辑快捷键
丰富的编辑控件支持以下快捷键。
| Keys | Operations | 注释 |
|---|---|---|
| Shift+Backspace | 在 bidi 键盘上生成 LRM/LRM | BiDi 特定 |
| Ctrl+Tab | 选项卡 | |
| Ctrl+Clear | 全选 | |
| Ctrl+数字板 5 | 全选 | |
| Ctrl+A | 全选 | |
| Ctrl+E | 居中对齐 | |
| Ctrl+J | 对齐方式合理 | |
| Ctrl+R | 右对齐方式 | |
| Ctrl+L | 左对齐方式 | |
| Ctrl+C | Copy | |
| Ctrl+V | 粘贴 | |
| Ctrl+X | 剪切 | |
| Ctrl+Z | 撤消 | |
| Ctrl+Y | 恢复 | |
| Ctrl+'+' (Ctrl+Shift+'=') | 上标 | |
| Ctrl+'=' | 下标 | |
| Ctrl+1 | 行距 = 1 行。 | |
| Ctrl+2 | 行距 = 2 行。 | |
| Ctrl+5 | 行距 = 1.5 行。 | |
| Ctrl+' (撇号) | 强调锐音 | 按短切键后,按相应的字母(例如,e 或 u)。 这仅适用于英语、法语、德语、意大利语和西班牙语键盘。 |
| Ctrl+' (坟墓) | 着色坟墓 | 请参阅 Ctrl+的注释。 |
| Ctrl+~ (波形符) | 着色平铺 | 请参阅 Ctrl+的注释。 |
| Ctrl+;(分号) | 着色 umlaut | 请参阅 Ctrl+的注释。 |
| Ctrl+Shift+6 | 重音插入符号 (扬光) | 请参阅 Ctrl+的注释。 |
| Ctrl+、(逗号) | 着色 cedilla | 请参阅 Ctrl+的注释。 |
| Ctrl+Shift+' (撇号) | 激活智能引号 | |
| 退格键 | 如果文本受到保护,请发出蜂鸣声,不要将其删除。 否则,请删除上一个字符。 | |
| Ctrl+Backspace | 删除上一个单词。 这会生成VK_F16代码。 | |
| F16 | 与 Backspace 相同。 | |
| Ctrl+Insert | Copy | |
| Shift+Insert | 粘贴 | |
| 插入 | 改写 | DBCS 不会覆盖。 |
| Ctrl+向左键 | 将光标向左移动一个单词。 | 在 bidi 键盘上,这取决于文本的方向。 |
| Ctrl+向右键 | 将光标向右移动一个单词。 | 请参阅 Ctrl+向左键注释。 |
| Ctrl+左移 | 左对齐方式 | 在 BiDi 文档中,这是从左到右的阅读顺序。 |
| Ctrl+右移 | 右对齐方式 | 在 BiDi 文档中,这是用于从右到左的阅读顺序。 |
| Ctrl+向上键 | 移动到上面的行。 | |
| Ctrl+向下键 | 移动到下面的行。 | |
| Ctrl+Home | 移动到文档的开头。 | |
| Ctrl+End | 移动到文档的末尾。 | |
| Ctrl+Page Up | 向上移动一页。 | 如果在 SystemEditMode 和单行控件中,则不执行任何作。 |
| Ctrl+Page Down | 向下移动一页。 | 请参阅 Ctrl+Page Up 注释。 |
| Ctrl+Delete | 删除下一个单词或所选字符。 | |
| Shift+Delete | 剪切所选字符。 | |
| Esc | 停止拖放。 | 执行拖放文本时。 |
| Alt+Esc | 更改活动应用程序。 | |
| Alt+X | 将插入点前面的 Unicode 十六进制值转换为相应的 Unicode 字符。 | |
| Alt+Shift+X | 将插入点前面的 Unicode 字符转换为相应的 Unicode 十六进制值。 | |
| Alt+0xxx (数字垫) | 低于 256 的值插入 ANSI 代码页中的字符(基于输入区域设置)。 高于 255 的值插入 Unicode 字符。 | 必须输入十进制值。 |
| Alt+Shift+Ctrl+F12 | 十六进制到 Unicode。 | 如果已将 Alt+X 用于其他用途。 |
| Alt+Shift+Ctrl+F11 | 所选文本将输出到调试器窗口,并保存到 %temp%\DumpFontInfo.txt。 | 仅适用于调试(需要在 Win.ini中设置 Flag=8) |
| Ctrl+Shift+A | 设置所有上限。 | |
| Ctrl+Shift+L | Fiddle 项目符号样式。 | |
| Ctrl+Shift+向右键 | 增加字号。 | 字号在 4pt-11pt 范围内更改 1 磅;by 2points for 12pt-28pt;它从 28pt - 36pt -> 48pt ->> 72pt -> 80pt 更改;它在 80pt - 1630pt 范围内更改 10 磅;最大值为 1638。 |
| Ctrl+Shift+向左键 | 减小字号。 | 请参阅 Ctrl+Shift+向右键注释。 |