为什么基于不存在的FontFamily创建一个Font工作?

时间:2012-01-29 21:52:21

标签: c++ windows winapi gdi+

我正在使用Gdi +绘制一些文本,并且我正在尝试确保我创建的字体确实存在。我注意到无论我指定的是什么字体,它都能正常工作。我有以下代码:

Font font(TEXT("SomeGibberishFOEIHSFUE"), 12, 0, UnitPoint);

if (!font.IsAvailable())
    exit(0);

// draw text

我的系统上没有安装名为SomeGibberishFOEIHSFUE的字体,但是IsAvailable返回TRUE并且程序运行并使用看起来像Arial而不是退出的字体绘制文本。这是为什么?

如果我使用IsAvailable错误,我应该使用什么函数来判断字体的创建是否成功?我还尝试了GetLastStatus,它返回Ok

1 个答案:

答案 0 :(得分:2)

这是Windows字体映射器正在工作,如果无法提供所请求的字体,它将始终找到替代字体。如有必要,可以回退到默认的GUI字体。您可以使用FontFamily类。它的.NET版本(看起来你正在使用它)将在您使用其构造函数并传递不存在的字体时抛出ArgumentException。它的原生GDI +版本有IsAvailable() method。是的,有点棘手的行为,但这在GDI +中并不罕见。