【问题标题】:How can a Label control display Japanese characters properly when the Font used doesn't support this language?当使用的字体不支持这种语言时,标签控件如何正确显示日文字符?
【发布时间】:2018-07-31 08:03:15
【问题描述】:

我正在开发一个以 .Net 4.5 作为目标框架的 Windows 窗体应用程序。

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

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

Label 有哪些内部功能可以实现这一点?

【问题讨论】:

    标签: c# .net winforms unicode label


    【解决方案1】:

    关于字体后备
    系统功能,绑定到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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-11
      • 2012-01-29
      • 1970-01-01
      • 2015-02-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多