使用 MS Shell Dlg 和 MS Shell Dlg 2

Windows 在多种语言的本地化版本中可用。 但是,英语版也可用于运行以英语以外的语言编写的应用程序。 即使用于这些语言的脚本不同,也是如此,就像用希腊文或日语编写应用程序一样。 这些应用程序需要一个用户界面,其中包含对话框、图标和实用工具,这些对话框、图标和实用工具以应用程序语言提供信息,这可能不同于当前 Windows 用户界面中使用的语言。

为用户界面选择字体时存在明显问题。 例如,对于 Windows 98,英语 (美国) Shell 字体(也称为系统或默认字体)是 MS Sans Serif,而希腊文 (希腊) Windows 98 的 shell 字体是 MS Sans Serif 希腊文。 对于日语 (日本) Windows 98,shell 字体为 MS UI 哥特式。 这些字符集不能直接映射到彼此。 当区域设置设置为希腊文时,将 MS Sans Serif 替换为 MS Sans Serif 希腊 (希腊) 不允许现有应用程序充分运行或在系统菜单、对话框和编辑控件中显示希腊字符。

Windows 通过使用 MS Shell Dlg 和 MS Shell Dlg 2 逻辑字体来解决此问题,以允许为脚本显示选择适当的字体。 本部分介绍使用逻辑字体实现对话框、菜单等的几个编程注意事项,这些用户界面可在所有受支持的 Windows 操作系统和所有语言中很好地显示。 有关详细信息,请参阅 字体创建和选择。 另请参阅 多语言用户界面 ,了解在为多语言应用程序创建用户界面时如何使用多语言用户界面 (MUI) 技术。

关于逻辑字体

MS Shell Dlg 和 MS Shell Dlg 2 逻辑字体实质上是用于映射的人脸名称,以支持具有代码页 1252(美国和西欧的 Windows 字符集)不包含的字符的区域设置/区域性。 MS Shell Dlg 映射到与当前区域性/区域设置关联的默认 shell 字体,并支持经典 Windows 桌面外观。 WINDOWS 2000 中引入了 MS Shell Dlg 2 人脸名称,以支持 Windows 2000 中引入的外观。

例如,如果应用程序使用 MS Shell Dlg 或 MS Shell Dlg 2 作为对话框,则为应用程序创建希腊文语言资源的本地化团队可以专注于文本翻译。 他们不必关心 MS Sans Serif 和 MS Sans Serif 希腊文之间的区别等问题。

注意

MS Shell Dlg 和 MS Shell Dlg 2 生成的字体在不同的 Windows 版本中有所不同。 因此,应确保用户界面元素在所有平台上都能很好地显示。

 

处理Hard-Coded字体名称

使用 Unicode 允许应用程序处理数千个不同的字符,但大多数字体并不涵盖所有 Unicode 字符集。 应用程序不应对字体名称进行硬编码。 一个原因是硬编码显示一种语言的字符而不是另一种语言的字符的字体名称会导致第二种语言的所有本地化文本显示错误。 不对字体名称进行硬编码的另一个原因是,在显示应用程序文本的操作系统上可能不会加载所需的字体。

处理字体名称的最佳方式是将它们视为可本地化的资源。 使用逻辑字体可以解决在 Windows NT 或 Windows 2000 上使用任何语言(针对任何语言)运行界面的问题。 通过将字体名称设置为可本地化的资源,本地化程序可以更改本地化用户界面的字体。

处理Hard-Coded字号

某些脚本很复杂,需要大量像素才能正确显示。 例如,大多数英文字符显示在 5x7 网格上,但日语字符至少需要 16x16 网格才能清楚地看到。 而中文需要 24x24 网格,而泰语只需要 8 像素的宽度,但至少需要 22 像素的高度。 很容易理解的是,某些字符在小字号上可能无法辨认。

应用程序用户界面应将字体大小视为可本地化的资源。 使用逻辑字体可以解决在 Windows NT 或 Windows 2000 上使用任何语言(针对任何语言)运行界面的问题。 将字号设置为可本地化的资源允许本地化者更改本地化用户界面的字体。

映射逻辑字体

注册表中的一个条目将每个逻辑字体映射到当前活动区域设置的相应 shell 字体。 使用其中一种逻辑字体时,Windows 会在运行时切换到当前所选区域设置的字体。 此操作允许正确显示英语 (美国) Windows 用户界面,以及代码页 1252 中未显示的字符。 因此,当前交付的本地化应用程序可以在英语 (美国) 版本的 Windows 上运行,而无需修改。

每台 Windows 计算机根据 NLS 术语中所述的非 Unicode 程序的定义语言,将 MS Shell Dlg 和 MS Shell Dlg 2 映射到适当的物理字体。 实际映射存储在注册表项中,HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\Current Version\FontSubstitutes。

Windows Me/98/95 上的字体映射

MS Shell Dlg 通常映射到特定于代码页的 MS Sans Serif 版本。

Windows NT 4.0 上的字体映射

MS Shell Dlg 映射到 MS Sans Serif,适用于西欧和中欧、希腊、土耳其、波罗的海以及使用西里尔文脚本的语言;适用于日语的 MS UI 哥特式;朝鲜语的古林;简体中文的 Simsun;繁体中文的 PMinglu:等。

Windows 2000、Windows XP、Windows Server 2003、Windows Vista 和 Windows 7 上的字体映射

这两种逻辑字体都映射到基于 Unicode 的 TrueType 字体。 MS Shell Dlg 使用 Microsoft Sans Serif (不同于 MS Sans Serif) (如果安装语言不是日语)。 如果安装语言为日语,MS Shell Dlg 将映射到 MS UI 哥特式。

在 Windows XP MUI 系统上,仅当系统区域设置和 UI 语言设置为日语时,MS Shell Dlg 才会映射到 MS UI 哥特式。 否则,MS Shell Dlg 映射到 Microsoft Sans Serif。

在 Windows Vista 和 Windows 7 上,如果计算机默认 UI 语言设置为日语 (,则无论安装语言) 如何,MS Shell Dlg 都会映射到 MS UI 哥特式。 如果计算机默认 UI 语言设置为日语以外的语言,MS Shell Dlg 将映射到 Microsoft Sans Serif。

MS Shell Dlg 2 仅使用 Tahoma 字体,而不考虑语言。 与 Microsoft Sans Serif 相较,Tahoma main优势在于 Tahoma 具有本机粗体字体。 其main缺点是,较旧的操作系统可能未安装它,并可能替换不太有吸引力的字体。

Tahoma 或 Microsoft Sans Serif 中未实现的字符可以在用于在用户界面中显示文本的其他 Windows 字体中实现。 根据用于显示文本的控件或 API,系统可以使用各种机制(如 字体链接 )自动选择用于显示这些字符的此类字体。

应用程序可以显式使用 Microsoft Sans Serif 或 Tahoma,并保存使用 MS Shell Dlg 或 MS Shell Dlg 2 所涉及的间接级别。 由于字体链接,指定 Microsoft Sans Serif 或 Tahoma 为所有语言提供适当的字形。

将 MS Shell Dlg 用于 Windows Me/98/95 上的非英语应用程序

在 Windows Me/98/95 上,MS Shell Dlg 不适用于在用户选择具有不同 Windows 基字符集的区域设置时运行的静态非英语用户界面应用程序。 在这种情况下,MS Shell Dlg 替换的字体可能不支持应用程序用户界面语言。

例如,如果用户使用的是德语版本的 Windows,并且想要安装非 Unicode 希腊语言应用程序,则用户尝试将区域设置更改为希腊 (希腊) 。 此操作会将 MS Shell Dlg 重置为希腊文字体,但此字体不包含用德语显示所需的所有字形。 因此,德语用户界面中的任何非 ASCII 字符将无法正确显示。 若要支持此方案,应用程序必须将 MS Shell Dlg 设置为同时包含西欧和希腊字形的字体。

国际字体枚举和选择

多语言用户界面