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