如何使用断字和换行信息

Rich Edit 控件会调用一个被称为断字过程的函数,以查找单词之间的断点,并确定可以换行的位置。 在执行换字操作以及处理 CTRL+ 左箭头键和 CTRL+ 右箭头键组合时,控件会使用这些信息。 应用程序可将消息发送到 Rich Edit 控件,以便替换默认的断词过程、检索断词信息以及确定给定字符所在的行。

需要了解的事项

技术

先决条件

  • C/C++
  • Windows 用户界面编程

说明

使用断字和换行信息

Rich Edit 控件的断字过程与编辑控件的断字过程类似,但它们具有额外的功能:这两种控件的断字过程都能确定某个字符是否是分隔符,并能在指定位置之前或之后找到最近的断字。 分隔符是标记单词末尾的字符,如空格。 通常,在编辑控件中,只有在分隔符之后才会出现断字。 不过,大多数亚洲语言适用不同的规则。

Rich Edit 控件的断字过程也将字符归入字符类,每个字符类由 0x00 至 0x0F 范围内的一个值标识。 断字出现在分隔符之后或不同类别的字符之间。 因此,为字母数字字符和标点符号字符设置不同类别的断字过程会在“Win.doc”字符串中发现两个断字(句点之前和之后)。

字符类可与零个或多个断字标志组合成一个 8 位值。 在执行换行操作时,Rich Edit 控件会使用断字标志来确定可以断行的位置。 Rich Edit 会使用以下断字标志。

标记 说明
WBF_BREAKAFTER 字符后可换行。
WBF_BREAKLINE 该字符为分隔符。 分隔符标记单词的末尾。 分隔符后可换行。
WBF_ISWHITE 该字符为空格字符。 换行时,行尾的空格字符不计入行的长度中。

 

WBF_BREAKAFTER 值用于允许在未标记单词结束的字符(如连字符)后进行换行。

可以使用 EM_SETWORDBREAKPROC 消息,用自己的程序替换 Rich Edit 控件的默认断字过程。 有关断字过程的详细信息,请参阅 EditWordBreakProc 函数的说明。

注意

由于多语言断字的复杂性,不建议在 Microsoft Rich Edit 2.0 及更高版本中使用这种替换。

 

对于 Microsoft Rich Edit 1.0,可以使用 EM_SETWORDBREAKPROCEX 消息,用 EditWordBreakProcEx 函数替换默认的扩展断字过程。 此函数提供有关文本的其他信息,如字符集。 可以使用 EM_GETWORDBREAKPROCEX 消息来检索当前扩展断字过程的地址。 请注意,Microsoft Rich Edit 2.0 及更高版本不支持 EditWordBreakProcExEM_GETWORDBREAKPROCEXEM_SETWORDBREAKPROCEX

可以使用 EM_FINDWORDBREAK 消息来查找断字,或者确定字符的类别和断字标志。 反过来,控件会调用其断字过程来获取所需的信息。

要确定某个字符位于哪一行,可以使用 EM_EXLINEFROMCHAR 消息。

使用富编辑控件

Windows 通用控件演示 (CppWindowsCommonControls)