Я пытаюсь заставить мою программу C ++ обнаруживать установленные шрифты на моем компьютере с Win32. Я попробовал fontconfig, взяв библиотеку из комплекта GTK +.
Я использую следующий тестовый код:
#include<fontconfig.h>
FcBool success = FcInit ();
if ( !success ) {
return false;
}
FcConfig *config = FcInitLoadConfigAndFonts ();
if(!config) {
return false;
}
FcChar8 *s, *file;
FcPattern *p = FcPatternCreate();
FcObjectSet *os = FcObjectSetBuild (FC_FAMILY,NULL);
FcFontSet *fs = FcFontList(config, p, os);
LOG("Total fonts: %d\n", fs->nfont);
for (int i=0; fs && i < fs->nfont; i++) {
FcPattern *font = fs->fonts[i];
s = FcNameUnparse(font);
LOG("Font: %s\n", s);
free(s);
if (FcPatternGetString(font, FC_FILE, 0, &file) == FcResultMatch) {
LOG("Filename: %s\n", file);
}
}
// destroy objects here ...
[/ NOEDIT]
К сожалению, это тестовое приложение печатает только:
Всего шрифтов: 0
Я знаю, что на моей машине установлены шрифты, и я знаю, что Gimp2.0 обнаруживает их, поэтому в моем тестовом коде должно быть что-то не так. У кого-нибудь есть идеи?
Кроме связывания fontconfig-1.dll, я больше ничего не делал. Я не создавал никаких конфигурационных файлов или чего-либо еще, потому что я нигде не мог прочитать о необходимости сделать это.
Я открыт для ваших предложений, спасибо!
Вместо:
FcConfig *config = FcInitLoadConfigAndFonts ();
Пытаться:
FcConfig *config = FcConfigCreate();
FcConfigAppFontAddDir(config, (const FcChar8 *)"C:\\Windows\\Fonts");
(это ленивая версия, вы должны адаптировать ее, чтобы выключить GetWindowsDirectory
…)
Других решений пока нет …