3

我正在编写一个日语测验程序,我不想要求人们安装适用于 Windows XP 的东亚语言包。我正在使用 GDI+ 来绘制文本。我尝试下载免费的 Unicode 字体并使用它来绘制文本。我在我的电脑上测试了它(安装了东亚包),它使用下载的字体正确显示了日文字符,但在另一台没有语言包的电脑上它不起作用。

我正在寻找有关如何完成这项工作的建议。该程序非常简单,仅使用 Win32 API、GDI+ 和 STL 用 C++ 编写。如果可能的话,我想只使用这些库。我确实有 UNICODE #defined。

我基本上用于绘制文本的代码粘贴在下面:

#include <gdiplus.h>
using namespace Gdiplus ;

Graphics * gi ;

PrivateFontCollection _fonts ;
_fonts.AddFontFile(fontFilename) ;
Font * currentFont = new Font(fontName, fontSize, FontStyleRegular, UnitPoint, &_fonts) ;

std::wstring text = L"Some text" ;
gi->DrawString(text.c_str(), (INT)text.size(), currentFont, rectangle, &format, &brush) ;
4

3 回答 3

1

解决方案相当简单。由于您不想发布字体,并且您不能指望任何可用的字体,您将不得不发布您想要使用的所有字符的图像。我建议使用 PNG,因为 JPEG 是针对照片的(很多小的渐变)

于 2009-03-10T11:29:27.283 回答
1

我错了。如果您的字体包含日文字符,即使没有安装东亚语言包,它也会在 Windows XP 中正确显示。

如果您安装了东亚语言包并且您的字体不支持日文字符,Windows 将在它认为最接近您的字体的两种字体中进行选择。这使我认为我使用的字体包括日文字符,因为当我在字体和系统字体之间切换时,它会改变字符的绘制方式。

微软有一个免费安装的日文字体,叫做Meiryo Collection Version 5.00。还有一个页面列出了更多日文字体,列出的字体的唯一问题是许可不明确。

于 2009-03-15T01:40:45.423 回答
0

还有一种名为 Lucida Sans Unicode 的字体可能有助于缓解问题。

于 2009-05-04T20:15:34.267 回答