我正在使用Gdi +绘制一些文本,并且我正在尝试确保我创建的字体确实存在。我注意到无论我指定的是什么字体,它都能正常工作。我有以下代码:
Font font(TEXT("SomeGibberishFOEIHSFUE"), 12, 0, UnitPoint);
if (!font.IsAvailable())
exit(0);
// draw text
我的系统上没有安装名为SomeGibberishFOEIHSFUE
的字体,但是IsAvailable
返回TRUE
并且程序运行并使用看起来像Arial而不是退出的字体绘制文本。这是为什么?
如果我使用IsAvailable
错误,我应该使用什么函数来判断字体的创建是否成功?我还尝试了GetLastStatus
,它返回Ok
。
答案 0 :(得分:2)
这是Windows字体映射器正在工作,如果无法提供所请求的字体,它将始终找到替代字体。如有必要,可以回退到默认的GUI字体。您可以使用FontFamily类。它的.NET版本(看起来你正在使用它)将在您使用其构造函数并传递不存在的字体时抛出ArgumentException。它的原生GDI +版本有IsAvailable() method。是的,有点棘手的行为,但这在GDI +中并不罕见。