丰富的编辑控件的原始规范是Microsoft Rich Edit 1.0; 当前的规范是Rich Edit 4.1。 丰富编辑的每个版本都是上述的超集,除了只有亚洲版本的Rich Edit 1.0具有垂直文本选项。 在创建丰富的编辑控件之前,您应该调用LoadLibrary功能来验证哪个版本的Rich Edit已安装。 有关详细信息,请参阅Rich Edit的新功能。
下表显示哪个DLL对应于哪个版本的Rich Edit。 请注意,文件的名称没有从2.0版更改为3.0版。 这允许2.0版本升级到3.0版,而不会破坏现有的代码。
丰富编辑版本 |
DLL |
1.0 |
的Riched32.dll |
2.0 |
RICHED20.DLL |
3.0 |
RICHED20.DLL |
4.1 |
Msftedit.dll |
以下列表描述了哪些版本的Microsoft Windows中包含哪些版本的Rich Edit。
Windows XP SP1 |
包括Rich Edit 4.1,Rich Edit 3.0和Rich Edit 1.0模拟器。 |
Windows XP |
包括Rich Edit 3.0与Rich Edit 1.0模拟器。 |
Windows我 |
包括Rich Edit 1.0和3.0。 |
Windows 2000 |
包括Rich Edit 3.0与Rich Edit 1.0模拟器。 |
Windows NT 4.0 |
包括Rich Edit 1.0和2.0。 |
Windows 98 |
包括Rich Edit 1.0和2.0。 |
Windows 95 |
仅包含Rich Edit 1.0。 但是,Riched20.dll与Windows 95兼容,可能需要它的应用程序安装。 |
在Windows 95/98 / Me上,Rich Edit 1.0已经本地化,因此它可以与同样本地化的特定操作系统配合使用。 例如,在日语版的操作系统中,Rich Edit 1.0可以显示日语,但不显示阿拉伯语。
Rich Edit的新功能
以下主题描述了每个版本的Rich Edit中引入的新功能。
丰富编辑版本1.0
Rich Edit 1.0包含以下功能。
文本输入和选择 |
大多数标准(系统编辑控件)选择和输入文本。 选择栏支持(选择栏是每个段落左侧未标记的区域,单击时,选择该行)。 单词和自动选择选项。 单,双,和三点击选择。 |
ANSI(单字节字符集(SBCS)和多字节字符集(MBCS))编辑 |
但是,没有Unicode编辑。 |
基本的字符/段落格式属性 |
参见CHARFORMAT和PARAFORMAT。 |
字符格式化属性 |
字体名称和大小,粗体,斜体,下划线,删除,保护,链接,偏移和文字颜色。 |
段落格式属性 |
开始缩进,右缩进,后续行偏移,项目符号,对齐(左,中心,右)和选项卡。 |
向前看 |
包括不区分大小写和匹配全字选项。 |
基于消息的界面 |
几乎是系统编辑控制消息集的超集,加上两个接口,IRichEditOle和IRichEditCallback。 |
嵌入对象 |
需要基于IRichEditOle和IRichEditCallback接口的客户端协作。 |
右键菜单支持 |
使用IRichEditCallback界面。 |
拖放编辑 |
支持拖放编辑。 |
Notifications |
WM_COMMAND发送给客户端的消息加上其他一些消息。 这是一个通用控制通知的超集。 |
单级撤消/重做 |
与系统编辑控件类似。 选择Undo会反转最后一个操作,然后该操作将成为新的Redo操作。 |
简单的垂直文本 |
(仅限亚洲版)。 |
输入法编辑器(IME)支持 |
(仅限亚洲版)。 |
WYSIWYG使用打印机指标编辑 |
特别是Microsoft WordPad需要此功能。 |
Cut/Copy/Paste/StreamIn/StreamOut |
使用带有和不带对象的纯文本(CF_TEXT)或RTF格式(RTF)。 |
C代码库 |
代码是用C编写的,它提供了一个坚实和多才多艺的基础。 |
不同脚本的不同构建 |
Rich Edit 1.0解决了不同版本的本地化问题。 |
丰富编辑版本2.0
Rich Edit 2.0包含了一些其他功能,例如支持Unicode和亚洲语言,多层Undo,组件对象模型(COM)接口以及众多用户界面(UI)增强功能。
Rich Edit 2.0除了Rich Edit 1.0提供的功能外,还包括以下功能。
Unicode |
Unicode简化了处理国际文本的工作。 然而,需要努力保持与现有非Unicode文档—的兼容性,即转换为非Unicode纯文本和富文本的功能。 此外,在Windows 95/98 / Me上正常运行需要付出很大的努力。 |
一般国际支持 |
通用断线算法(Kinsoku规则的扩展),简单字体链接,键盘字体切换。 |
亚洲支持 |
IME支持2级(对话框)和3(内联)。 |
查找/查找支持 |
支持向前和向后搜索。 |
双向支持 |
这是包含在Rich Edit 2.1中 |
多级撤消 |
可扩展的Undo架构允许客户端参与应用程序范围的Undo模型。 |
麦哲伦鼠标支持 |
这是一个滚动滚轮鼠标。 |
双字体支持 |
当活动字体不适用于当前键盘时,键盘可以自动切换字体,例如Times New Roman中的汉字字符。 |
智能字体适用 |
字体更改请求不适用西方字体到亚洲字符。 |
改进显示 |
当同一行上出现多个字体时,将使用离线位图。 这允许,例如,该词的最后一个字母不要被切断。 |
透明度支持 |
也在无窗模式。 |
系统选择颜色 |
用于选择文字。 |
自动网址识别 |
可以检查一些URL格式(例如,http :) |
Microsoft Word编辑UI兼容性 |
选择,光标键盘语义。 |
词标EOP |
段落末尾(CR)也可以处理回车/换行(CR / LF)(回车,换行)。 |
纯文本以及富文本功能 |
单字符格式和单段格式。 |
单行和多行控件 |
在第一个末尾截断并且没有换行。 |
加速键 |
支持加速键。 |
密码窗口样式 |
密码编辑控件通过EM_GETPASSWORDCHAR和EM_SETPASSWORDCHAR提供。 |
可扩展架构 |
减少实例大小。 |
无窗操作和接口 |
这是通过ITextHost和ITextServices接口提供的。 |
COM双接口 |
文本对象模型(TOM)接口。 |
CHARFORMAT2 |
添加字体重量,背景颜色,区域设置标识符,下划线类型,上标和下标(除了偏移量),禁用效果。 对于仅RTF往返行程,添加到字母之间的空格,二进制尺寸以上的字符对,动画文本类型,各种效果:字体阴影/轮廓,所有帽子,小帽子,隐藏,压纹,印记和修订。 |
PARAFORMAT2 |
增加空格前后和字线间距。 仅对于RTF往返,添加阴影重量/样式,编号开始/样式/标签,边框空格/宽度/边,选项卡对齐/领导,各种Word段落效果:RTL段落,保留,保留下一页,分页符, 无线号码,无寡妇控制,不连字符,并排。 |
更多的RTF往返 |
所有Word FormatFont和FormatParagraph属性。 |
代码稳定性和稳定性 |
示例:参数和对象验证,函数不变量,重入守卫,对象稳定。 |
强大的测试基础设施 |
包括广泛的回归测试。 |
改进的性能 |
较小的工作集,更快的载入和重新显示时间等 |
C ++代码库 |
该代码用C ++编写,为构建Rich Edit 3.0提供了坚实的基础。 |
除了少数例外,Rich Edit 2.0使用与Rich Edit 1.0相同的功能,结构和消息。 但是请注意以下差异:
· | Rich Edit 1.0窗口类的名称为RichEdit。 Rich Edit 2.0分别具有ANSI和Unicode窗口类别— RichEdit20A和RichEdit20W。 要指定适当的富编辑窗口类,请使用RICHEDIT_CLASS常量,Richedit.h文件根据UNICODE编译标志的定义进行定义。 |
· | 在Rich Edit 2.0中,如果您创建了一个Unicode丰富的编辑控件(预期为Unicode文本消息),则必须在发送到控件的任何窗口消息中仅指定Unicode数据。 同样,如果您创建一个ANSI丰富的编辑控件,只发送ANSI或双字节字符集(DBCS)数据。 您可以使用IsWindowUnicode功能来确定富编辑控件是否使用Unicode文本消息。 请注意,丰富的编辑COM接口使用Unicode文本,除非它们遇到代码页参数。 |
· | Rich Edit 1.0使用CR / LF字符组合进行段落标记。 Rich Edit 2.0仅使用回车符('\ r')。 Rich Edit 3.0仅使用回车符,但在这方面可以模拟Rich Edit 1.0。 |
· | Rich Edit 2.0引入了以下新消息。 |
Message |
描述 |
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 |
停止将当前撤消操作中的连续打字操作分组。 |
· | Rich Edit 2.0引入了以下新结构。 |
Structure |
描述 |
CHARFORMAT2 |
包含有关字符格式的信息。 |
PARAFORMAT2 |
包含有关段落格式的信息。 |
· | Rich Edit 2.0和3.0不支持以前在亚洲语言版本的Rich Edit 1.0中支持的以下消息。 |
EM_CONVPOSITION
EM_GETIMECOLOR
EM_GETIMEOPTIONS
EM_GETPUNCTUATION
EM_GETWORDWRAPMODE
EM_SETIMECOLOR
EM_SETIMEOPTIONS
EM_SETPUNCTUATION
EM_SETWORDWRAPMODE
丰富编辑版本3.0
Rich Edit 3.0是一个单一的,可扩展的全球DLL,可以在一个小包中提供与Word的高性能和兼容性。 Rich Edit 3.0的新功能包括更丰富的文字,缩放,字体绑定,更强大的IME支持以及丰富的复杂脚本支持(双向,印度语和泰语)。
Rich Edit 3.0除了丰富编辑版本2.0提供的功能外,还包括以下功能。
Zoom |
缩放因子由一个比率给出。 |
||||||||
段号(单级) |
数字,上下字母或罗马数字。 |
||||||||
简单的桌子 |
删除和插入行是可能的,但不能调整大小,也不能在单元格内进行包装。 随着高级排版打开(参见EM_GETTYPOGRAPHYOPTIONS),Rich Edit 3.0可以将列对齐或向右对齐,并包含小数。 单元格由选项卡模拟,因此文本选项卡和回车符将被空格替换。 |
||||||||
正常和标题样式 |
EM_SETPARAFORMAT和文本对象模型(TOM)界面支持内置普通样式和标题样式1到9。 |
||||||||
更多下划线类型 |
已添加虚线,点划线,虚线点和点下划线。 |
||||||||
下划线着色 |
带下划线的文字可以用下划线颜色的15个文件选项之一进行标记。 |
||||||||
隐藏文字 |
标记为CHARFORMAT2属性。 方便用于通常不显示的信息的往返(写入文件中读取的内容)。 |
||||||||
更多默认热键 |
这些热键与Word中的功能相同。 例如,欧洲重音死键(仅限美国键盘)。 通过编号选项提供数字热键(CTRL + L)循环,从项目符号开始。 |
||||||||
HexToUnicode IME |
允许用户使用热键在十六进制和Unicode之间进行转换。 |
||||||||
智能报价 |
美国键盘的CTRL + ALT +'可以打开或关闭此功能。 |
||||||||
软连字符 |
对于纯文本,请使用0xAD。 对于RTF,请使用\ - 。 |
||||||||
斜体光标 |
此外,当超过URL时,鼠标光标会变为手。 |
||||||||
高级排版选项 |
Rich Edit 3.0可以使用高级排版选项进行换行和显示(请参阅EM_GETTYPOGRAPHYOPTIONS)。 这个优雅的选项主要是为了方便处理复杂的脚本(双向,印度语和泰语)。 此外,简单脚本还会发生一些改进。 例如:
|
||||||||
复杂的脚本支持 |
Rich Edit 3.0支持双向(带有阿拉伯语和/或希伯来语与其他脚本混合的文本),印度语(印度语脚本,如Devangari)和泰语文本。 为了支持这些复杂的脚本,使用了高级排版和Uniscribe组件。 |
||||||||
字体绑定 |
Rich Edit 3.0将自动为不明显不属于当前字符集的字符选择适当的字体。 这是通过将字符集分配给文本运行并将字体与这些字符集相关联来完成的。 有关详细信息,请参阅字体绑定。 |
||||||||
字符集特定的纯文本读/写选项 |
这允许使用一个字符集读取文件,并使用不同的字符集进行写入。 |
||||||||
UTF-8 RTF |
这被推荐用于切割,复制和粘贴操作。 此文件格式比普通RTF更加紧凑,速度更快,与Unicode兼容。 |
||||||||
Microsoft Office 9 IME支持(IME98) |
这种更强大的IME功能已经被分成独立的模块。 功能包括:
在早期版本中,用户需要先删除最终的字符串,然后键入一个新的字符串才能获得正确的候选。 这个新功能使用户能够将最终的字符串转换回到合成模式,从而允许简单地选择不同的候选字符串。
此功能为IME98提供了当前段落的文本,这有助于IME98在打字过程中执行更准确的转换。
此功能可在打字过程中更好地控制候选人和UI窗口。
此功能提供了IME98用于定位UI窗口(例如候选列表)的当前插入符和行信息。 |
||||||||
主动输入法管理器(IMM)支持 |
用户可以调用Active IMM对象,使用户可以在美国系统上输入亚洲字符。 |
||||||||
HexToUnicode支持 |
用户可以使用热键在十六进制符号和Unicode之间进行转换。 |
||||||||
更多的RTF往返 |
从文件读入的RTF文本将被完整写入。 |
||||||||
改进了1.0兼容模式 |
Rich Edit 3.0可以模拟Rich Edit 1.0的行为。 例如,可以在MBCS和Unicode字符位置(cp)映射之间进行更改。 此功能在Windows 2000中模拟Rich Edit 1.0。 |
||||||||
增加冻结控制 |
显示可以通过多个API调用冻结,然后解冻以显示更新。 |
||||||||
增加撤消控制 |
撤销可以暂停并恢复(IME要求)。 |
||||||||
增加/减少字体大小 |
将字体大小增加或减小为六个标准值(12,28,36,48,72和80点)之一。 |
丰富编辑版本4.1
Rich Edit 4.1的新功能包括连字符,页面轮换和文本服务框架(TSF)支持。
Rich Edit 4.1除了丰富编辑版本3.0。提供的功能外,还包括以下功能
Hyphenation |
通过以下API支持连字:HyphenateProc,EM_SETHYPHENATEINFO和EM_GETHYPHENATEINFO。 |
||||||||
页面旋转 |
由EM_SETPAGEROTATE和EM_GETPAGEROTATE支持从上到下和底部到顶部的布局。 |
||||||||
文本服务框架支持 |
|
||||||||
额外的IME支持 |
|
||||||||
附加EM_SETEDITSTYLE设置 |
除了TSF设置外,还有新的设置可以排除IME,设置双向文本流,使用draftmode字体等。 |
||||||||
附加的EM_SETCHARFORMAT设置 |
新标志允许客户端为给定的LCID或字符集设置默认字体和字体大小,以设置控件的默认字体,以防止键盘切换与字体匹配等。 |
||||||||
限制对ANSI文本的输入 |
在EM_SETTEXTMODE中使用TM_SINGLECODEPAGE可以防止Unicode输入进入Rich Edit控件。 |
||||||||
不支持的RTF关键字通知 |
当有不受支持的RTF关键字时,EN_LOWFIRTF会向应用程序发出警告。 |
||||||||
额外的语言支持 |
其他语言包括亚美尼亚,迪维希,泰卢固语等。 |
||||||||
改进表支持 |
功能包括:在单元内包装,通过RTF改进处理,改进导航。 |
||||||||
ES_VERTICAL |
支持ES_VERTICAL窗口样式。 |
||||||||
WM_UNICHAR通知支持 |
要发送或发布Unicode字符到ANSI窗口,请使用WM_UNICHAR通知。 它相当于WM_CHAR,但它使用(UTF)-32。 |
创建丰富的编辑控件
要创建丰富的编辑控件,请调用CreateWindowEx函数,指定丰富的编辑窗口类。 如果您使用Rich Edit 1.0(Riched32.dll),请为窗口类参数指定RichEdit。 如果您使用Rich Edit 2.0或更高版本(Riched20.dll),请为窗口类参数指定RICHEDIT_CLASS。
丰富的编辑控件支持与编辑控件以及其他样式一起使用的大多数窗口样式。 如果要允许控件中的多行文本,则应指定ES_MULTILINE窗口样式。
Note牋 To use visual styles with these controls, an application must include a manifest and must call InitCommonControls at the beginning of the program. For information on visual styles, see 视觉风格. For information on manifests, see 使用Windows XP视觉样式.
文本格式
应用程序可以将消息发送到丰富的编辑控件,以格式化字符和段落以检索格式信息。 段落格式属性包括对齐,选项卡,缩进,编号和简单表。 对于字符,您可以指定字体名称,大小,颜色和效果,例如粗体,斜体和受保护。
您可以使用EM_SETPARAFORMAT消息应用段落格式。 要确定所选文本的当前段落格式,请使用EM_GETPARAFORMAT消息。 这两个消息都使用PARAFORMAT或PARAFORMAT2结构来指定段落格式属性。
您可以使用EM_SETCHARFORMAT邮件来应用字符格式。 要确定所选文本的当前字符格式,可以使用EM_GETCHARFORMAT消息。 这两个消息都使用CHARFORMAT或CHARFORMAT2结构来指定字符属性。
您还可以使用EM_SETCHARFORMAT和EM_GETCHARFORMAT消息来设置和检索插入点的字符格式,这是应用于任何随后插入的字符的格式。 例如,如果应用程序将默认字符格式设置为粗体,然后用户键入字符,则该字符为粗体。
仅当当前选择为空(如果当前选择是插入点)时,插入点的字符格式才会应用于新插入的文本。 否则,新文本假定其替换的文本的字符格式。 如果选择更改,默认字符格式将更改为匹配新选择中的第一个字符。
受保护的字符效果是唯一的,因为它不会改变文本的外观。 如果用户尝试修改受保护的文本,则丰富的编辑控件将其父窗口发送一条EN_PROTECTED通知消息,允许父窗口允许或阻止更改。 要接收此通知消息,您必须使用EM_SETEVENTMASK消息启用它。
前景颜色始终是字符属性。 在Rich Edit 1.0中,背景颜色只是丰富的编辑控件的属性。 要设置默认背景颜色,请使用EM_SETBKGNDCOLOR消息。 请注意,Rich Edit不支援WM_CTLCOLOREDIT讯息。
丰富编辑控件中的当前选择
用户可以使用鼠标或键盘选择丰富的编辑控件中的文本。 当前选择是所选字符的范围,如果没有选择字符,则是插入点的位置。 应用程序可以获取有关当前选择,设置,确定何时更改以及显示或隐藏选择突出显示的信息。
要确定富编辑控件中的当前选择,请使用EM_EXGETSEL消息。 要设置当前选择,请使用EM_EXSETSEL消息。 CHARRANGE结构与两条消息一起使用,并指定一系列字符。 要检索有关当前选择内容的信息,可以使用EM_SELECTIONTYPE消息。
应用程序可以通过处理EN_SELCHANGE通知消息来检测当前选择何时更改。 通知消息指定包含有关新选择的信息的SELCHANGE结构。 丰富的编辑控件只有通过使用EM_SETEVENTMASK消息启用它时才会发送此通知消息。
默认情况下,丰富的编辑控件在获取和丢失焦点时显示并隐藏选择突出显示。 您可以随时使用EM_HIDESELECTION消息来显示或隐藏选择突出显示。 例如,应用程序可能会提供一个“搜索”对话框来查找丰富的编辑控件中的文本。 应用程序可能选择匹配的文本而不关闭对话框,在这种情况下,它必须使用EM_HIDESELECTION消息突出显示选择。
与编辑控件一样,您可以指定ES_NOHIDESEL窗口样式,以防止丰富的编辑控件在失去焦点时隐藏选择突出显示。
作为使用EM_EXGETSEL和EM_EXSETSEL消息的替代方法,您可以使用EM_GETSEL和EM_SETSEL编辑控制消息来检索和设置当前选择。 EM_GETSEL消息将两个16位字符索引包装到其32位返回值中,因此,仅适用于完全落在第一个64K内的选择。 但是,丰富的编辑控件绝对不会包含超过32K个字符的文本,除非您使用EM_LIMITTEXT或EM_EXLIMITTEXT消息来扩展此限制。 对于超出第一个64KB文本的选项,EM_GETSEL消息返回– 1.在这种情况下,您仍然可以使用wParam和lParam中返回的值来查找选择的开始和结束字符。
丰富的编辑文本操作
应用程序可以发送消息以在丰富的编辑控件中检索或查找文本。 您可以检索选定的文本或指定的文本范围。
要使选定的文本获得丰富的编辑控件,请使用EM_GETSELTEXT消息。 文本被复制到指定的字符数组。 您必须确保数组足够大以容纳所选文本加终止空字符。
要检索指定的文本范围,请使用EM_GETTEXTRANGE消息。 与此消息一起使用的TEXTRANGE结构指定要检索的文本范围,并指向接收文本的字符数组。 这里再次应用程序必须确保数组足够大,以便指定文本加上终止空字符。
您可以使用EM_FINDTEXT消息搜索丰富的编辑控件中的字符串。 与此消息一起使用的FINDTEXT结构指定要搜索的文本范围和要搜索的字符串。 您还可以指定搜索是否区分大小写的选项。
RichEdit 3.0还支持HexToUnicode IME,它允许用户使用热键在十六进制和Unicode之间进行转换。 有关详细信息,请参阅HexToUnicode。
词和线断裂
丰富的编辑控件调用一个称为单词过程的函数来查找单词之间的间隔,并确定它可以在哪里断开线。 当执行单词包装操作和处理CTRL + LEFT箭头键和CTRL + RIGHT ARROW键组合时,该控件使用此信息。 应用程序可以将消息发送到丰富的编辑控件,以替换默认的单词中断过程,以检索断字信息,并确定给定字符所在的行。
丰富的编辑控件的Word-break程序与编辑控件类似,但它们具有其他功能:两种类型的控件的单词分隔过程可以确定一个字符是否是一个分隔符,并可以在之前或之后找到最近的单词 指定位置。 分隔符是标记单词结尾的字符,例如空格。 通常,在编辑控件中,仅在分隔符之后才会发生单词中断。 然而,不同的规则适用于大多数亚洲语言。
用于丰富编辑控件的Word-break程序还可将字符分组为字符类,每个字符由& H00到& H0F范围内的值标识。 分隔符发生在分隔符之后或不同类的字符之间。 因此,对于字母数字和标点符号,具有不同类别的单词中断过程将在字符串“Win.doc”(期间之前和之后)发现两个单词。
一个字符的类可以与零个或多个单词标记组合,形成一个8位值。 当执行换行操作时,丰富的编辑控件使用单词标记来确定它可以在哪里断开线。 Rich Edit使用以下分词标志。
Flags |
描述 |
WBF_BREAKAFTER |
线条可能在角色后被打破。 |
WBF_BREAKLINE |
字符是分隔符。 分隔符标记词的末尾。 分隔符后可能会打破行。 |
WBF_ISWHITE |
字符是一个空格字符。 包装时,线条长度中不包括尾随的空白字符。 |
WBF_BREAKAFTER值用于允许在不标记单词结尾的字符(例如连字符)之后进行换行。
您可以使用EM_SETWORDBREAKPROC消息替换丰富编辑控件的默认单词过程,并使用您自己的过程。 有关分词过程的更多信息,请参阅EditWordBreakProc函数的描述。
Note牋This replacement is not recommended for Rich Edit control 2.0 and later, due to the complexity of multilingual word breaking.
对于Rich Edit 1.0,您可以使用EM_SETWORDBREAKPROCEX消息将EditWordBreakProcEx函数替换为默认的扩展断字过程。 此功能提供有关文本的其他信息,例如字符集。 您可以使用EM_GETWORDBREAKPROCEX消息来检索当前扩展断字过程的地址。 请注意,Rich Edit 2.0及更高版本不支持EditWordBreakProcEx EM_GETWORDBREAKPROCEX和EM_SETWORDBREAKPROCEX。
您可以使用EM_FINDWORDBREAK消息查找单词或确定字符的类和字词标记。 反过来,控制器调用其断开程序来获取请求的信息。
要确定给定字符的哪一行,您可以使用EM_EXLINEFROMCHAR消息。
丰富编辑剪贴板操作
应用程序可以使用最佳可用剪贴板格式或特定剪贴板格式将剪贴板的内容粘贴到丰富的编辑控件中。 您还可以确定丰富的编辑控件是否能够粘贴剪贴板格式。
与编辑控件一样,您可以使用WM_COPY或WM_CUT消息来复制或剪切当前选择的内容。 同样,您可以使用WM_PASTE消息将剪贴板的内容粘贴到丰富的编辑控件中。 控件粘贴其识别的第一种可用格式,这可能是最具描述性的格式。
要粘贴特定的剪贴板格式,您可以使用EM_PASTESPECIAL消息。 此消息对于具有粘贴特别命令的应用程序非常有用,该命令使用户能够选择剪贴板格式。 您可以使用EM_CANPASTE消息来确定控件是否识别给定的格式。
您还可以使用EM_CANPASTE消息来确定是否可以通过丰富的编辑控件识别任何可用的剪贴板格式。 处理WM_INITMENUPOPUP消息时,此消息很有用。 应用程序可能会启用或灰色其Paste命令,具体取决于控件是否可以粘贴任何可用的格式。
丰富的编辑控件注册两种剪贴板格式:
· | RTF |
· | RichEdit文本和对象 |
应用程序可以使用RegisterClipboardFormat功能注册这些格式,指定CF_RTF和CF_RETEXTOBJJ值。
Streams
您可以使用流将数据传入或传出丰富的编辑控件。 流由EDITSTREAM结构定义,该结构指定缓冲区和应用程序定义的–回调函数。
要将数据读入丰富的编辑控件(即数据中的数据流),请使用EM_STREAMIN消息。 控制重复地调用应用程序的回调函数,每次将一部分数据传输到缓冲区。
要保存丰富的编辑控件的内容(即数据流输出),您可以使用EM_STREAMOUT消息。 该控件重复写入缓冲区,然后调用应用程序的回调函数。 对于每个呼叫,回调函数保存缓冲区的内容。
Printing
您可以将消息发送到丰富的编辑控件,以便为指定的设备(如打印机)呈现其输出。 您还可以指定富文本编辑控件格式化其文本的输出设备。
要格式化特定设备的丰富的编辑控件内容的一部分,您可以使用EM_FORMATRANGE消息。 与此消息一起使用的FORMATRANGE结构指定要格式化的文本范围以及目标设备的设备上下文。
格式化输出设备的文本后,可以使用EM_DISPLAYBAND消息将输出发送到设备。 通过反复使用EM_FORMATRANGE和EM_DISPLAYBAND消息,打印富编辑控件内容的应用程序可以实现条带。 (Banding是输出为更小的部分进行打印)。
您可以使用EM_SETTARGETDEVICE消息来指定富文本编辑控件格式化其文本的目标设备。 此消息对所见即所得格式有用,其中应用程序使用默认打印机的字体指标而不是屏幕来定位文本。
无底的编辑控件
应用程序可以根据需要调整丰富的编辑控件的大小,以使其始终与其内容大小相同。 丰富的编辑控件支持这种所谓的无底功能,只要其内容的大小发生变化,通过发送其父窗口EN_REQUESTRESIZE通知消息。
处理EN_REQUESTRESIZE通知消息时,应用程序应将控件的大小调整为指定REQRESIZE结构中的维度。 应用程序也可以移动控件附近的任何信息,以适应控件的高度变化。 要调整控件大小,可以使用SetWindowPos功能。
您可以强制使用EM_REQUESTRESIZE消息发送EN_REQUESTRESIZE通知消息的无底的丰富编辑控件。 当处理WM_SIZE消息时,此消息将非常有用。
要接收EN_REQUESTRESIZE通知消息,您必须使用EM_SETEVENTMASK消息启用通知。
杂项通知信息
丰富的编辑控件的父窗口可以处理通知消息以监视影响控件的事件。 丰富的编辑控件支持与编辑控件一起使用的所有通知消息以及其他一些通知消息。 您可以通过设置其事件掩码来确定丰富的编辑控件发送其父窗口的哪些通知消息。
要为丰富的编辑控件设置事件掩码,请使用EM_SETEVENTMASK消息。 您可以使用EM_GETEVENTMASK消息来检索丰富的编辑控件的当前事件掩码。 有关事件掩码标志的列表,请参阅丰富的编辑控制事件掩码标志。
丰富的编辑控件的父窗口可以通过处理EN_MSGFILTER通知消息来过滤控件的所有键盘和鼠标输入。 父窗口可以防止键盘或鼠标消息被处理,或者可以通过修改指定的MSGFILTER结构来更改消息。
应用程序可以处理EN_PROTECTED通知消息,以检测用户何时尝试修改受保护的文本。 要将文本范围标记为受保护,可以设置受保护的字符效果。 有关详细信息,请参阅文本格式。
您可以通过处理EN_DROPFILES通知消息,使用户能够通过丰富的编辑控件删除文件。 指定的ENDROPFILES结构包含有关要删除的文件的信息。
字体绑定
Rich Edit 3.0将根据其上下文将字符集分配给纯文本字符。 一些例子是:
· | 韩文符号获得HANGUL_CHARSET |
· | 无中性的ANSI字符在任何情况下均可获得ANSI_CHARSET |
· | 如果在附近发现假名字符,汉字会被取消SHIFTJIS_CHARSET,如果附近没有发现假名,则可以使用GB2312_CHARSET。 |
· | 希腊字符获得GREEK_CHARSET |
Note牋The Rich Edit control uses Unicode internally, so this use of charset differs from the original one used in font specifications. But CHARFORMAT has a well-defined place for the charset.
中性字符(如空白和数字)根据其上下文分配一个字符集。 例如,由相同字符集的字符包围的空白会获得该字符集。 用于双向文本的中性和数字是以基于Unicode双向算法的方式分配的字符集。
一旦分配了字符集,Rich Edit会向前和向后扫描插入点周围的文本,以查找已用于字符集的最近的字体。 如果没有找到字符集的字体,富编辑将使用客户端为该字符集选择的字体。 如果客户端没有为字符集指定字体,则rich编辑将使用该字符集的默认字体。 如果客户想要一些其他字体,客户端可以随时更改它,但这种方法大部分时间都会运行。 当前的默认字体选择基于下表。 请注意,默认字体是按照每个进程设置的,并且UI用法和非UI用法都有不同的列表。
Language |
UI字体名称 |
UI字体大小 |
非UI字体名称 |
非UI字体大小 |
西,CE,ME,越南人 |
宋体 |
8 |
宋体 |
10 |
日本 |
MS UI哥特式 |
9 |
MS P哥特式 |
10 |
朝鲜的 |
Gulim |
9 |
Gulim |
9 |
简体中文 |
宋体 |
9 |
宋体 |
10 |
繁体中文 |
PMingLiU |
9 |
PMingLiU |
9 |
泰国 |
MS Sans Serif |
8 |
宋体 |
14 |
符号 |
宋体 |
8 |
宋体 |
10 |
梵文 |
曼加勒 |
8 |
曼加勒 |
10 |
泰米尔人 |
Latha |
8 |
Latha |
10 |
格鲁吉亚语,亚美尼亚语 |
Arial Unicode |
8 |
Arial Unicode |
10 |
因此,在默认的字体绑定表(条目具有字符集,字体名称,大小)中,Rich Edit允许ANSI_CHARSET匹配多个字符集,而相应的字符集可以一一对应地匹配其他字体。 更确切地说,只要没有找到其他替代方案,富编辑就使用ANSI_CHARSET选项。 您将能够指定比此更细的粒度,例如:为阿拉伯语运行指定特定的ARABIC_CHARSET,例如为希腊语运行指定特定的希腊字体。 如果在区域是字体绑定之前在文档的某处找到具有所需字符集标记的字体,那么也会使用更细的粒度。
请注意,Rich Edit目前不处理声称支持字符集但不完整的字体中缺少的字形。 在复制脚本的显示时,Rich Edit最终知道这样的字形丢失,但并不会导致后台存储使用新的字体。 通常,操作系统的底层字体链接将会完成此操作。
丰富编辑4.1:要设置脚本的默认字体,请调用CHARFORMAT2 yHeight,bCharSet,bPitchAndFamily,szFaceName和lcid致电EM_SETCHARFORMAT。 另外,要获取特定代码页的默认字体,请使用指定bCharSet和lcid的CHARFORMAT2调用EM_GETCHARFORMAT。
不支持的编辑控制功能
丰富的编辑控件支持多行编辑控件的大多数但不是全部功能。 本节列出了丰富的编辑控件不支持的编辑控件消息和窗口样式。
以下消息由编辑控件处理,而不是由丰富的编辑控件处理。
不支持的消息 |
Comments |
EM_FMTLINES |
不支持。 |
EM_GETHANDLE |
丰富的编辑控件不会将文本存储为简单的字符数组。 |
EM_GETIMESTATUS |
不支持。 |
EM_GETMARGINS |
不支持。 |
EM_SETHANDLE |
丰富的编辑控件不会将文本存储为简单的字符数组。 |
EM_SETIMESTATUS |
不支持。 |
EM_SETMARGINS |
在Rich Edit 3.0中支持 |
EM_SETRECTNP |
在Rich Edit 3.0中支持 |
EM_SETTABSTOPS |
将使用EM_SETPARAFORMAT消息。 在Rich Edit 3.0中支持 |
WM_CTLCOLOR |
使用EM_SETBKGNDCOLOR消息。 |
WM_GETFONT |
将使用EM_GETCHARFORMAT消息。 |
以下窗口样式与多行编辑控件一起使用,但不包含丰富的编辑控件:ES_LOWERCASE,ES_UPPERCASE和ES_OEMCONVERT。
丰富的编辑快捷键
丰富的编辑控件支持以下快捷键。
Keys |
Operations |
Comments |
Shift + Backspace键 |
在双子座键盘上生成LRM / LRM |
BiDi具体 |
按Ctrl+ Tab键 |
标签 |
|
按Ctrl+清除 |
全选 |
|
Ctrl + Number Pad 5 |
全选 |
|
按Ctrl+ A |
全选 |
|
按Ctrl+ E |
中心对齐 |
|
按Ctrl+ J |
对齐对齐 |
|
CTRL+ R |
右对齐 |
|
按Ctrl+ L |
左对齐 |
|
按Ctrl+ C |
复制 |
|
按Ctrl+ V |
糊 |
|
按Ctrl+ X |
切 |
|
按Ctrl+ Z |
解开 |
|
按Ctrl+ Y |
重做 |
|
Ctrl +'+'(Ctrl + Shift +'=') |
标 |
|
CTRL+ '=' |
标 |
|
按Ctrl+1 |
行间距= 1行。 |
|
按Ctrl+2 |
行间距= 2行。 |
|
按Ctrl+5 |
行间距= 1.5行。 |
|
Ctrl +'(撇号) |
重音急 |
按下快捷键后,按相应的字母(例如a,e或u)。 这仅适用于英语,法语,德语,意大利语和西班牙语键盘。 |
Ctrl +`(grave) |
重音坟墓 |
请参阅Ctrl +'注释。 |
Ctrl +?(波浪号) |
口音开朗 |
请参阅Ctrl +'注释。 |
按Ctrl+; (分号) |
重音变音 |
请参阅Ctrl +'注释。 |
CTRL + SHIFT +6 |
口音(回旋) |
请参阅Ctrl +'注释。 |
Ctrl +,(逗号) |
重音松露 |
请参阅Ctrl +'注释。 |
Ctrl + Shift +'(撇号) |
激活智能报价 |
|
退格 |
如果文字受到保护,哔声并不要删除。 否则删除上一个字符。 |
|
按Ctrl+ Backspace键 |
删除上一个字。 这产生一个VK_F16代码。 |
|
F16 |
与Backspace相同。 |
|
按Ctrl+插入 |
复制 |
|
Shift + Insert键 |
糊 |
|
插 |
覆盖 |
DBCS不覆盖。 |
Ctrl +向左箭头 |
将光标向左移动一个字。 |
在双子座键盘上,这取决于文本的方向。 |
Ctrl +向右箭头 |
将光标向右移动一个字。 |
请参阅Ctrl +向左箭头注释。 |
Ctrl +左移 |
左对齐 |
在BiDi文档中,这是从左到右的阅读顺序。 |
Ctrl +右移 |
右对齐 |
在BiDi文档中,这是从右到左的阅读顺序。 |
Ctrl +向上箭头 |
移动到上面的行。 |
|
Ctrl +向下箭头 |
移动到下面的行。 |
|
Ctrl + Home |
移动到文档的开头。 |
|
CTRL + END |
移动到文档的末尾。 |
|
Ctrl + Page Up |
向上移动一页。 |
如果在SystemEditMode和Single Line控件中,不执行任何操作。 |
Ctrl + Page Down |
向下移动一页。 |
请参阅Ctrl + Page Up注释。 |
按Ctrl+删除 |
删除下一个字或所选字符。 |
|
Shift + Delete键 |
剪切所选字符。 |
|
退出 |
停止拖放。 |
在拖放文本的同时。 |
Alt + Esc |
更改活动应用程序。 |
|
ALT + X |
将插入点之前的Unicode十六进制值转换为相应的Unicode字符。 |
|
Alt + Shift + X |
将插入点之前的Unicode字符转换为相应的Unicode十六进制值。 |
|
Alt + 0xxx(数字键盘) |
如果xxx大于255,则插入Unicode值。当xxx小于256时,将根据当前键盘插入ASCI范围文本。 |
必须输入十进制值。 |
ALT + SHIFT + CTRL+ F12 |
十六进制到Unicode。 |
如果Alt + X已被用于另外使用。 |
ALT + SHIFT + CTRL+ F11 |
所选文本将被输出到调试器窗口并保存到%temp%\ DumpFontInfo.txt。 |
仅用于调试(需要在Win.ini中设置Flag = 8) |
按Ctrl + Shift+ A |
设置所有大写。 |
|
Ctrl + Shift + L |
小提琴子弹风格。 |
|
Ctrl + Shift +向右箭头 |
增加字体大小。 |
字体大小在4pt-11pt范围内变化1点; 12pt-28pt为2点; 它从28pt - > 36pt - > 48pt - > 72pt - > 80pt; 它在80pt - 1630pt的范围内变化10分; 最大值为1638。 |
Ctrl + Shift +向左箭头 |
减小字体大小。 |
请参阅Ctrl + Shift +向右箭头注释。 |