2012-11-27 46 views
4

我想讓我的C++程序在我的Win32機器上檢測已安裝的字體。我通過從GTK +包中獲取庫來嘗試fontconfig。fontconfig找不到字體

我用下面的測試代碼:

#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 ... 

遺憾的是本次測試的應用程序只打印:

總字體:0

我知道有安裝的字體我的機器和我知道Gimp2.0檢測到它們,所以我的測試代碼一定有問題。有人有什麼主意嗎?

除了連接fontconfig-1.dll之外,我什麼也沒做。我還沒有創建任何配置文件或任何東西,因爲我無法閱讀關於必須這樣做的任何地方。

我接受你的建議,謝謝!

回答

1

相反的:

FcConfig *config = FcInitLoadConfigAndFonts(); 

嘗試:

FcConfig *config = FcConfigCreate(); 
FcConfigAppFontAddDir(config, (const FcChar8 *)"C:\\Windows\\Fonts"); 

(這是懶惰的版本,你要適應它熄滅GetWindowsDirectory ...)