我正在使用.Net 4.5目标框架开发Winform应用程序。
我注意到一件事,如果我在Label
控件上以日语显示文本,而标签(Arial)的Font
不支持日语字符,那么Label
也可以成功显示这些字符。
如果我在分配日语文本之前和之后检查标签的字体属性,它只会显示“ Arial”,因此字体可能不会动态更改。
Label具有哪些内部功能可以实现此目标?
答案 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