标签字体不支持日语字符时,Label控件如何正确显示日语字符?

时间:2018-07-31 08:03:15

标签: c# winforms unicode label

我正在使用.Net 4.5目标框架开发Winform应用程序。

我注意到一件事,如果我在Label控件上以日语显示文本,而标签(Arial)的Font不支持日语字符,那么Label也可以成功显示这些字符。

如果我在分配日语文本之前和之后检查标签的字体属性,它只会显示“ Arial”,因此字体可能不会动态更改。

Label具有哪些内部功能可以实现此目标?

1 个答案:

答案 0 :(得分:3)

关于字体后备。
系统功能,绑定到International Font Management。它会自动选择用户在应用程序中选择的字体以外的其他字体,以表示使用中的字体无法处理的字形。
另请参见:International Font Enumeration and Selection

可以在系统注册表中找到预定义的字体替换:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink

RichTextBox/RichEdit控件相关的示例和一些注释在此处报告:
Some keys change my RichTextBox font

通过将EM_SETLANGOPTIONS设置为IMF_AUTOFONT选项来创建控件。
预定义的行为,当当前字体无法显示Unicode子集时,这是自动字体回退。文本选择报告字体替换参考。

当默认映射不返回直接匹配项时,可以使用Unicode Subset Bitfields选择字体替换。

任何字体替换都与当前系统语言和可用的已安装字体有关。系统专门安装了多种字体来支持此功能。后备字体通常在系统字体存储库(在Windows中为\Windows\Fonts)中标记为“隐藏”。可以使用工具栏按钮或上下文菜单中的Show命令将它们标记为可用/可枚举。
Arial Unicode在其中)。

另请参阅:

International Fonts and Text Display
About Multilingual User Interface
Using Font Fallback
Uniscribe