2

更新(回应第一个答案,来自 Hans Passant):我想我没有很好地解释我的用例。此应用程序旨在让人们以“主”语言(很可能是英语,但不一定)输入数据,然后方便输入另一种语言的翻译。这一切都是通过富文本框界面完成的。

因此,无论他们想使用什么字体来输入翻译,都必须是支持他们正在翻译的语言的脚本的字体。

如果我知道“目标语言”,最好只列出支持以该语言输入文本的字体。

==================================================== =====================

我正在开发一个带有 SQL Server 后端的 VB.net 应用程序。我们将支持多种语言的富文本条目(用户接受),包括那些不是西方文字的(例如中文、日语、阿拉伯语等)

我们有一个对话框,用户可以从中选择他们想要使用的语言。对于每种语言,用户必须指定一种合适的(默认)字体,以便在应用程序的富文本框中输入该语言的任何文本。

示例:用户想要输入中文文本,因此选择“中文”作为我们应用程序中使用的语言。用户必须指定输入汉字的字体;所以我们显示一个 Windows.Forms.FontDialog。

在这个字体选择对话框中,我希望能够根据他们选择的语言的代码页(脚本)过滤可用字体列表。

例如,“Brush Script MT”字体只支持西方字符——不支持中文——所以如果用户选择输入中文文本的字体,那么“Brush Script MT”字体不应出现在列表中。

有人对如何实现这一点有任何想法吗?我已经开始使用 System.Text.Encoding 来获取本地系统正在使用的 Windows 代码页的编号 - 我走的是正确的道路吗?

谢谢你的帮助!

马特

4

1 回答 1

0

首先你打电话EnumFontFamiliesEx()

在回调函数中,您将获得一个NEWTEXTMETRICEX描述字体属性的结构。

该结构包含一个名为“ ntmTm”的嵌入式结构,其中包含一个字段“ tmCharSet”。

一些值的例子是:

128 = SHIFTJIS
129 = HANGUL
130 = JOHAB
134 = GB2312
136 = CHINESEBIG5

通过这种方式,字体会告诉您它支持例如 BIG5 字符集。

此外,该结构还有另一个嵌入结构“ ntmFontSig”,其中包含一个字段“ fsUsb”,该字段具有一个 128 位 Unicode 子集位域,最多可识别 126 个 Unicode 子范围。

于 2014-07-25T00:44:02.977 回答