c++ - 为什么基于不存在的 FontFamily 创建字体有效?

标签 c++ windows winapi gdi+

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

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

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

// draw text

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

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

最佳答案

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

关于c++ - 为什么基于不存在的 FontFamily 创建字体有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9057121/

相关文章:

c++ - "APIENTRY _tWinMain"和"WINAPI WinMain"的区别

c - 使用 GetAdaptersAddresses 查找临时 IPv6 地址

c++ - 从在 postgresql 上运行的 C++ 文件打印

c# - 如何启用/禁用防火墙?

c# - 使用任务管理器终止程序时收到的消息

c++ - 从 USB 设备中的设备路径获取卷名称

windows - taskkill 和 taskkill/f 的区别

c++ - g++ 未定义对 'Curve:Curve()' 的引用

c++ - DbgHelp.dll 是 Windows 内置的吗?我可以相信它在那里吗?

c++ - 检查套接字关闭