C++ 检查字体的嵌入类型
在我的应用程序中,我试图在一个组合框中列出安装在TrueType窗口上的字体,这些字体具有嵌入权限EMBED\u EDITABLE,以便以后可以将它们嵌入到PDF中 首先,我列出所有带有C++ 检查字体的嵌入类型,c++,winapi,fonts,C++,Winapi,Fonts,在我的应用程序中,我试图在一个组合框中列出安装在TrueType窗口上的字体,这些字体具有嵌入权限EMBED\u EDITABLE,以便以后可以将它们嵌入到PDF中 首先,我列出所有带有 EnumFontFamiliesEx(dc, &lf, (FONTENUMPROC)EnumFontProc, lparam, 0); 在回调函数中,我检查: BOOL CALLBACK WFonteCombo::EnumFontProc(LPLOGFONT lplf,
EnumFontFamiliesEx(dc, &lf, (FONTENUMPROC)EnumFontProc, lparam, 0);
在回调函数中,我检查:
BOOL CALLBACK WFonteCombo::EnumFontProc(LPLOGFONT lplf,
LPTEXTMETRIC lptm,
DWORD dwType,
LPARAM lpData)
{
if (dwType == TRUETYPE_FONTTYPE)
{
HDC hDC = ::CreateDC(_T("DISPLAY"), NULL, NULL, NULL);
_ASSERTE(hDC);
::SelectObject(hDC, lplf);
ULONG privstatus = 0;
LONG ttStatus;
ttStatus = ::TTGetEmbeddingType(hDC, &privstatus);
if (ttStatus == E_NONE)
{
if (privstatus == EMBED_EDITABLE)
{
// Do Something.
}
}
::DeleteDC(hDC);
}
return TRUE;
}
TTGetEmbeddingType正在返回E\u NOTATRUETYPEFONT,但由于我的情况,我知道字体是TrueType
if (dwType == TRUETYPE_FONTTYPE)
因为返回的第一个字体是这个(TrueType字体)
你知道我做错了什么吗?以防有人遇到同样的问题 我的SelectObject错误,我无法选择LPLOGFONT首先我必须使用CreateFontIndirect创建字体,然后选择HFONT
HFONT hfont = ::CreateFontIndirect(lplf);
HGDIOBJ hOldFnt = ::SelectObject(hDC, hfont);
该错误有点误导,因为它不仅不是TrueType字体,也不是任何类型的字体。您泄漏了该DC中最初的字体。您的调用是错误的,原因更为普通:它从未评估返回值,这确实表示成功和失败。基本上,您没有检查错误。