GetFontUnicodeRanges获取指定字体文件中的字符

AddFontResourceExW函数(wingdi.h)

AddFontResourceEx功能添加从指定的文件到系统的字体资源。使用AddFontResourceEx函数添加的字体可以标记为私有且不可枚举。

函数

int AddFontResourceExW(
  LPCWSTR name,
  DWORD   fl,
  PVOID   res
);

name:

指向以空字符结尾的字符串的指针,该字符串包含有效的字体文件名。此参数可以指定以下任何文件。
要添加信息来自多个资源文件的字体,请将lpszFileName指向一个字符串,文件名之间用|分隔。-例如,abcxxxxx.pfm | abcxxxxx.pfb。

fl:

要添加到系统的字体的特征。此参数可以是以下值之一。

表2
价值意义

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,以及无锯齿显示矢量字体

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值