Использование файла ресурсов с PrivateFontCollection - PullRequest
0 голосов
/ 06 ноября 2018

Я использую класс PrivateFontCollection в программе на c ++ с файлом .ttf в папке «Resource Files». Я хотел бы иметь возможность сделать что-то вроде этого:

privateFontCollection.AddFontFile(L"Exo-Regular.ttf");

Но единственный способ заставить его работать - это получить к нему доступ через локальный путь к файлу, например:

privateFontCollection.AddFontFile(L"C:\\Users\\maybe\\Desktop\\Exo-Regular.ttf");

1 Ответ

0 голосов
/ 06 ноября 2018

Вы не можете сделать это с помощью метода AddFontFile(); ожидаемая строка пути не может быть включена в ресурсы, встроенные в вашу скомпилированную программу.

Вместо этого вам нужно будет использовать AddMemoryFont() ... и передать ему указатель на данные ресурса, которые вы получили через API с учетом ресурсов.

Есть вопрос 2013 года, когда кто-то делал это на C #: "addFontFile from resources" . Я не знаю, какие другие библиотеки классов вы используете, но если вы программируете на прямой Win32, получение указателя и размера для вашего шрифта будет выглядеть примерно так:

HMODULE module = NULL; // search current process, override if needed
HRSRC resource = FindResource(module, L"Exo-Regular.ttf", RT_RCDATA);
if (!resource) {...error handling... }
HGLOBAL handle = LoadResource(module, resource);
if (!handle) {...error handling... }

// "It is not necessary to unlock resources because the system
// automatically deletes them when the process that created
// them terminates."
//
void *memory = LockResource(handle);
DWORD length = SizeofResource(module, resource);

privateFontCollection.AddMemoryFont(memory, length);
...