如何在 Rich Edit 控件中使用字体绑定

Microsoft Rich Edit 3.0 会根据上下文为纯文本字符分配一个字符集。 一些示例如:

  • 希腊文字符分配为 GREEK_CHARSET
  • 韩文符号分配为 HANGUL_CHARSET
  • 如果附近找到了汉字假名,则分配 SHIFTJIS_CHARSET;如果附近未找到汉字假名,则分配 GB2312_CHARSET
  • 在任何情况下,非中性 ANSI 字符都被分配为 ANSI_CHARSET

注意

Rich Edit 控件内部使用 Unicode,因此使用的字符集与字体规范中使用的原始字符集有所不同。 但是,CHARFORMAT 结构为字符集规定了明确的位置。

 

会根据中性字符(如空白和数字)的上下文来为其分配一个字符集。 例如,被同一字符集的字符包围的空白会获取该字符集。 用于双向文本的中性字符和数字是根据 Unicode 双向算法来分配字符集的。

需要了解的事项

技术

先决条件

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

说明

在 Rich Edit 控件中使用字体绑定

在分配字符集后,Rich Edit 会向前和向后扫描插入点周围的文本,以找到与字符集最接近的字体。 如果没有为某个字符集找到字体,则 Rich Edit 会使用客户端为该字符集选择的字体。 如果客户端没有为字符集指定字体,则 Rich Edit 就会使用该字符集的默认字体。 如果客户端想要其他字体,则可以随时更换,但这种方法在大多数情况下都是可行的。 当前默认字体选择基于下表。 请注意,默认字体是按进程设置的,用户界面使用和非用户界面使用都有不同的列表。

语言 用户界面字体名称 用户界面字体大小 非用户界面字体名称 非用户界面字体大小
西方语言、CE、ME、越南语 Tahoma 8 Arial 10
日语 MS UI Gothic 9 MS P Gothic 10
韩语 Gulim 9 Gulim 9
简体中文 Simsun 9 SimSun 10
繁体中文 PMingLiU 9 PMingLiU 9
泰语 MS Sans Serif 8 Tahoma 14
符号 Wingdings 8 Wingdings 10
梵语 Mangal 8 Mangal 10
泰米尔语 Latha 8 Latha 10
格鲁吉亚语、亚美尼亚语 Arial Unicode 8 Arial Unicode 10

 

因此,在默认字体绑定表中(条目具有字符集、字体名称和大小),Rich Edit 允许 ANSI_CHAR标准版T 匹配多个字符集,而相应的字符集则以一对一的方式匹配其他字体。 更确切地说,只要找不到其他选择,Rich Edit 就会使用 ANSI_CHARSET。 可以指定比这更精细的粒度;例如,为阿拉伯语运行指定特定的 ARABIC_CHARSET,为希腊语运行指定特定的希腊字体等。 如果在要进行字体绑定的区域之前,在文档的某处找到了带有所需字符集标记的字体,则也会使用这种更精细的粒度。

请注意,Rich Edit 目前不处理声称支持字符集但不完整的字体中的缺失标志符号。 在复杂脚本的显示过程中,Rich Edit 最终会发现缺少这样一个标志符号,但不会导致后备存储使用新字体。 通常,操作系统的基础字体链接将完成这一操作。

注解

Rich Edit 4.1:要为脚本设置默认字体,请使用 CHARFORMAT2 调用 EM_SETCHARFORMAT 并指定 yHeightbCharSetbPitchAndFamilyszFaceNamelcid 成员的值。 此外,要获取特定代码页的默认字体,可以调用 EM_GETCHARFORMATCHARFORMAT2,并指定 bCharSetlcid 成员的值。

使用 Rich Edit 控件

Windows 通用控件演示 (CppWindowsCommonControls)