在我的应用程序中,我尝试在Windows上安装的组合框字体中列出TrueType并具有嵌入权限 EMBED_EDITABLE ,以便稍后我可以将它们嵌入到PDF中。
首先我用
列出所有字体EnumFontFamiliesEx(dc, &lf, (FONTENUMPROC)EnumFontProc, lparam, 0);
在我的CALLBACK函数中,我检查:
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_NOTATRUETYPEFONT 但我知道由于我的情况字体是TrueType
if (dwType == TRUETYPE_FONTTYPE)
并且因为返回的第一个字体是此one(TrueType字体)。
我在做错什么想法?
答案 0 :(得分:0)
如果有人遇到同样的问题。
我的SelectObject错误,我无法选择 LPLOGFONT 首先我必须使用CreateFontIndirect创建一个字体,然后选择 HFONT 。
HFONT hfont = ::CreateFontIndirect(lplf);
HGDIOBJ hOldFnt = ::SelectObject(hDC, hfont);
错误有点误导,因为它不是TrueType字体,它不是任何类型的字体。