【发布时间】:2017-07-24 13:34:33
【问题描述】:
AddFontResourceEx 为每种字体返回 1,但这些字体在 GDI+ 中不可访问(在 VS2015 和 Windows 10 上测试,也在 Windows 2008 R2 Server 上测试)。
如果我使用 Windows 字体资源管理器手动安装字体,一切正常。 似乎 GDI+ 找不到使用 AddFontResourceEx 或 AddFontResource 添加的字体,知道我怎样才能让它工作吗?
我使用 CodeJock 库,它使用 GDI+ 字体呈现 XAML 图形,所以我无法控制如何创建字体。
int n = 0;
CPathW pw;
pw.Combine(theApp.m_strMyAppFolder, _T("Roboto-Light.ttf"));
n =AddFontResourceEx(pw, FR_PRIVATE, nullptr);
pw.Combine(theApp.m_strMyAppFolder, _T("Roboto-Thin.ttf"));
AddFontResourceEx(pw, FR_PRIVATE, nullptr);
pw.Combine(theApp.m_strMyAppFolder, _T("Roboto-Regular.ttf"));
AddFontResourceEx(pw, FR_PRIVATE, nullptr);
pw.Combine(theApp.m_strMyAppFolder, _T("Ubuntu-R.ttf"));
AddFontResourceEx(pw, FR_PRIVATE, nullptr);
pw.Combine(theApp.m_strMyAppFolder, _T("Ubuntu-L.ttf"));
AddFontResourceEx(pw, FR_PRIVATE, nullptr);
::SendNotifyMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
【问题讨论】:
-
您是否尝试在同一进程中使用这些字体? “此函数允许一个进程使用字体,而不允许其他进程访问该字体。”
-
是的,它是同一个进程,没有 DLLs
-
该问题假定 AddFontResourceEx() 存在错误。它没有错误。不要忽略返回值,错误处理不是可选的。并且不要忽略问题出在使用该库的代码中的可能性。在 SO 问题中,这些几率总是非常非常高。
-
每种字体返回1,这不是错误,是安装的字体个数。