Проверка типа встраивания шрифта - PullRequest
0 голосов
/ 08 мая 2018

В моем приложении я пытаюсь перечислить в шрифтах комбинированного списка, установленных в 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).

Есть идеи, что я делаю не так?

1 Ответ

0 голосов
/ 08 мая 2018

В случае, если кто-то работает с той же проблемой.

Мой объект SelectObject был неправильным, я не могу выбрать LPLOGFONT Сначала я должен создать шрифт с помощью CreateFontIndirect, а затем выбрать HFONT .

HFONT hfont = ::CreateFontIndirect(lplf);
HGDIOBJ hOldFnt = ::SelectObject(hDC, hfont);

Ошибка немного вводит в заблуждение, потому что это был не просто шрифт TrueType, а любой другой тип шрифта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...