AddFontResourceExW函数(wingdi.h)
该AddFontResourceEx功能添加从指定的文件到系统的字体资源。使用AddFontResourceEx函数添加的字体可以标记为私有且不可枚举。
函数
int AddFontResourceExW(
LPCWSTR name,
DWORD fl,
PVOID res
);
name:
指向以空字符结尾的字符串的指针,该字符串包含有效的字体文件名。此参数可以指定以下任何文件。
要添加信息来自多个资源文件的字体,请将lpszFileName指向一个字符串,文件名之间用|分隔。-例如,abcxxxxx.pfm | abcxxxxx.pfb。
fl:
要添加到系统的字体的特征。此参数可以是以下值之一。
价值 | 意义 |
---|---|
FR_PRIVATE | 指定只有调用AddFontResourceEx函数的进程才能使用此字体。当字体名称与公共字体匹配时,将选择私有字体。当进程终止时,系统将使用AddFontResourceEx函数删除该进程安装的所有字体。 |
FR_NOT_ENUM | 指定没有任何进程(包括调用AddFontResourceEx函数的进程)可以枚举此字体。 |
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,以及无锯齿显示矢量字体