使用为 SBCS 字符设计的字体时,Windows 的 DBCS 版本不会正确显示 DBCS 字符。使用 Visual Basic 英语版本或其它 SBCS 语言版本开发允许 DBCS 的应用程序时,需要改变 Font 对象的 Name 属性。Name 属性决定控件中显示文本的字体、运行时图片中的字体和打印操作中的字体。该属性的缺省值是 Visual Basic 英语版本中的 MS Sans Serif。为在 DBCS 环境中正确显示文本,将设置值改成应用程序在 DBCS 环境下运行时适当的字体。也可能需要通过改变 Font 对象的 Size 属性来改变字体大小。通常,在大字数东亚平台上,应用程序中的文本最好以 9 磅字体显示,而欧洲平台上典型的是 8 磅字体。
同样,通过应用程序打印 DBCS 字符时,也应考虑这些因素。
如果没有允许 DBCS 的字体,或者不知道那一种字体适合于目标平台,可用一些选项来解决这些字体问题。
在 Windows 的繁体汉语、简体汉语和朝鲜语版本中,有一称为字体关联的系统功能。例如,朝鲜语 Windows 中,字体关联自动地将应用程序中的英语字体映射成朝鲜语字体。因此,即使是应用程序使用英语字体,仍然能够显示朝鲜语字符。关联的字体由运行平台的系统注册表中的 \HKEY_LOCAL_MACHINE\System\CurrentControlSet\control\fontassoc
\Associated DefaultFonts 的设置决定。由于有系统支持的字体关联,可以不用改变任何字体设置,而在汉语或朝鲜语平台上运行英语应用程序。其它平台如日语 Windows 没有字体关联。
另一选项是使用 System 字体或 FixedSys 字体。每个平台都可使用这些字体。注意 System 字体和 FixedSys 字体大小不能改变。如果在设计时设置的任何一种字体大小(用 Font 对象的 Size 属性)与使用机器上的字体大小不匹配,则忽略设置值、截断显示文本。
虽然有上述选项,这些解决方法仍有限制。下面的示例是应用程序在运行时,使用全局解决方法改变其中的字体。下面的代码可在 Windows 的任何语言版本上运行,它决定驻留在系统中的字体,应用程序将在该系统下运行,将适当的字体应用到参数中指定的 Font 对象。
Private Const DEFAULT_CHARSET = 1 Private Const SYMBOL_CHARSET = 2 Private Const SHIFTJIS_CHARSET = 128 Private Const HANGEUL_CHARSET = 129 Private Const CHINESEBIG5_CHARSET = 136 Private Const CHINESESIMPLIFIED_CHARSET = 134 Private Declare Function GetUserDefaultLCID Lib "kernel32" () As Long Public Sub SetProperFont(obj As Object) On Error GoTo ErrorSetProperFont Select Case GetUserDefaultLCID Case &H404 '
繁体中文obj.Charset = CHINESEBIG5_CHARSET
obj.Name = ChrW(&H65B0) + ChrW(&H7D30) + ChrW(&H660E) _
+ ChrW(&H9AD4) 'New Ming-Li
obj.Size = 9
Case &H411 '
日语obj.Charset = SHIFTJIS_CHARSET
obj.Name = ChrW(&HFF2D) + ChrW(&HFF33) + ChrW(&H20) + _
ChrW(&HFF30) + ChrW(&H30B4) + ChrW(&H30B7) + ChrW(&H30C3) + _
ChrW(&H30AF)
obj.Size = 9
Case &H412 '
朝鲜UserLCID
obj.Charset = HANGEUL_CHARSET
obj.Name = ChrW(&HAD74) + ChrW(&HB9BC)
obj.Size = 9
Case &H804 '
简体中文obj.Charset = CHINESESIMPLIFIED_CHARSET
obj.Name = ChrW(&H5B8B) + ChrW(&H4F53)
obj.Size = 9
Case Else '
其他国家/
地区obj.Charset = DEFAULT_CHARSET
obj.Name = "" '
获得缺省UI
字体。obj.Size = 8
End Select
Exit Sub
ErrorSetProperFont:
Err.Number = Err
也可更改这个简单的示例代码将字体应用到其它字体设置上,如打印选项。