winapi — C ++ LogFont для встраивания в XPS

Я пытаюсь объединить несколько API-интерфейсов для облегчения печати XPS. Поскольку шрифты True Type иногда ограничены тем, как их можно использовать, рекомендуется запросить у ОС (Windows) лицензию, связанную со шрифтом. Запрещенный метод, который я нашел для этого, выглядит так:

HDC hDC = CreateDC(L"DISPLAY", NULL, NULL, NULL);
// logfont is a valid instance of LOGFONTW
HGDIOBJ hfont = ::CreateFontIndirect(&logfont);
if (!SelectObject(hDC, hfont))
return;
ULONG privstatus = 0;
LONG ttStatus;
ttStatus = TTGetEmbeddingType(hDC, &privstatus);

На этом этапе ttStatus должен быть E_NONE если TTGetEmbeddingType удалось, и Privstatus должен быть одним из {EMBED_PREVIEWPRINT, EMBED_EDITABLE, EMBED_INSTALLABLE, EMBED_NOEMBEDDING}, У меня был этот пример, работающий в пятницу. Сегодня, когда я запускаю мой исполняемый файл TTGetEmbeddingType, возвращается 0x0A (E_NOTATRUETYPEFONT) вместо E_NONE, Wat? Я что-то упускаю из-за способности ОС определять, можно ли встроить шрифт?

0

Решение

Текст сообщения об ошибке, который вы цитировали («Среда невернапринадлежит к ERROR_BAD_ENVIRONMENT системный код ошибки, который имеет числовое значение 10 (0x0A). Тем не мение, TTGetEmbeddingType() не возвращает системный код ошибки. TTGetEmbeddingType() документация состояния:

В случае успеха возвращает E_NONE.

Эта функция считывает привилегии встраивания, хранящиеся в шрифте, и передает привилегии в pulPrivStatus.

В противном случае возвращает код ошибки, описанный в Сообщения об ошибках встраивания.

Если вы посмотрите на фактические определения в T2embapi.h, возвращаемое значение 0x000A является E_NOTATRUETYPEFONT

Указанный шрифт не является шрифтом TrueType.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]