AddFontResourceExW函數(wingdi.h)
該AddFontResourceEx功能添加從指定的檔案到系統的字型資源。使用AddFontResourceEx函數添加的字型可以标記為私有且不可枚舉。
函數
int AddFontResourceExW(
LPCWSTR name,
DWORD fl,
PVOID res
);
name:
name:
指向以空字元結尾的字元串的指針,該字元串包含有效的字型檔案名。此參數可以指定以下任何檔案。
要添加資訊來自多個資源檔案的字型,請将lpszFileName指向一個字元串,檔案名之間用|分隔。-例如,abcxxxxx.pfm | abcxxxxx.pfb。
fl:
fl:
要添加到系統的字型的特征。此參數可以是以下值之一。
價值 | 意義 |
---|---|
FR_PRIVATE | 指定隻有調用AddFontResourceEx函數的程序才能使用此字型。當字型名稱與公共字型比對時,将選擇私有字型。當程序終止時,系統将使用AddFontResourceEx函數删除該程序安裝的所有字型。 |
FR_NOT_ENUM | 指定沒有任何程序(包括調用AddFontResourceEx函數的程序)可以枚舉此字型。 |
res:
res:
必須為零。
傳回值
如果函數成功,則傳回值指定添加的字型數量。
如果函數失敗,則傳回值為0。
使用方法
該函數GetFontUnicodeRanges 需要調用2次, 第一次使其第二個參數為NULL,目的是獲得GLYPHSET 對象所需空間,然後配置設定空間
最後,再次調用GetFontUnicodeRanges函數,此時第二個參數為剛配置設定好空間的GLYPHSET對象指針,目的是将字庫中的字元資訊儲存在此對象中,以便進一步處理。
示例
HDC hdc=GetDC(0);
DWORD size=0;
int i;int j;wchar_t myChar[20000];
int q=0;
int error2 = AddFontResourceEx(_T("E:/Pro/WorkSpace/C/TestFont/TestFont/fonts/arial.ttf"), FR_PRIVATE, 0);
if (!error2)
{
printf("字型加載失敗!");
}
HFONT hfont = CreateFont(20, 0, 0, 0, FW_HEAVY, 0, 0, 0, DEFAULT_CHARSET,\
OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FF_DONTCARE, _T("font_171.ttf"));
HFONT oldFont =(HFONT)SelectObject(hdc,hfont);
//第一次調用,獲得所需空間大小
size=GetFontUnicodeRanges(hdc,NULL);
// 配置設定空間
GLYPHSET *pGlyphSet=(GLYPHSET*) new BYTE[size];
pGlyphSet->cbThis=size;
//第二次調用,獲得字庫相關資訊
size=GetFontUnicodeRanges(hdc,pGlyphSet);
for(i=0;i<pGlyphSet->cRanges;i++){
for(j=0;j<pGlyphSet->ranges[i].cGlyphs;j++){
myChar[q]=j+pGlyphSet->ranges[i].wcLow;//這就是包含的字元
q++;
}
}
注意:該函數隻能識别正常有效的字型檔案
參考博文:
GetFontUnicodeRanges、GetFontUnicodeRanges
C++解析IconFont矢量字型檔案ttf,以及無鋸齒顯示矢量字型