矢量字体研究

由于多画面项目需要使用质量字体进行显示字符信息,在以前的项目中采用的都是点阵字库,对字形没有过多的要求。一般使用16*1624*24的字库文件,比较典型的就是税控机使用的GB18030的汉字库了,这个字库还是收费字库,据说版权费好几万呢。

点阵字库可以在固定的分辨率的显示屏上显示出固定大小的点阵位图,不能进行随意缩放,缩放后会产生失真。这个在实际的应用中已经充分验证,尤其在多画面的项目中更不能使用了。

介于以上的原因,考虑使用矢量字库。

矢量字库只是了解,并没有在实际的应用中使用过,存在很多的技术障碍。

开始不了解WINCE能否支持矢量字体,后来偶然想到WINCE下的word程序,将WINCEWORD程序打开后,创建了一个文件,然后输入汉字和字符,通过更改字体的大小,发现字体的大小发生变化,但字形并没有发生变形,从中可以得出这样的结论:WINCE支持矢量字体。

下一步就是着手了解WINCE如何操作矢量字体了,通过一系列的测试,摸清了字体的显示方式,这些在另外的笔记中已经做了记录,这些就不再重复。

先将目前的几个疑问做一总结,已经得到答疑,还需进一步的验证测试。

createfont的函数中,最后一个参数一直没有搞清楚。

函数原型:HFONT CreateFont(int nHeight, int nWidth, int nEscapement, int nOrientation, int fnWeight, DWORD fdwltalic, DWORD fdwUnderline, DWORD fdwStrikeOut, DWORD fdwCharSet, DWORD fdwOutputPrecision, DWORD fdwClipPrecision, DWORD fdwQuality, DWORD fdwPitchAndFamily, LPCTSTR lpszFace)

 

系统如何确定指向指定字体的字样名

通过

函数原型:int AddFontResource(LPCTSTR lpszFilename)

参数:

  lpszFilename:指向含有一个有效的字体文件的文件名,它是以\0结束的字符串的指针,此文件名可以指定一个.FON字体资源文件、一个.FNT未加工位图字体文件、一个.TTF未加工TrueType文件或一个.FON TrueType资源文件。

  返回值:如果函数调用成功,则返回值为增加的字体数;如果函数调用失败,返回值是0

 

可以通过字体的文件名加载字体文件,但是这个字体的文件明并不是lpszFace

 

后来在另外的一篇博客中发现了这个答案,

LOGFONT logFont;
logFont.lfFaceName=_T("msyh")
AddFontResource
_T("msyh.ttf") --- 这里请填入字体文件的全路径,无论放在哪个文件夹下都可以,没有必要打包到nk

logFont.lfFaceName ---
是指字体名字而不是文件名,至于字体名字是什么,xp下双击字体文件就可以看到了

 

 

 

 

 

 

通过上面的博客来看,可以确定了字体名称和字体文件名之间的联系了。

AddFontResource是和文件名称进行关联,调用后WINCE OS会将这个文件的字体名称解析出来,在CreateFont的最后一个参数指定字体名称时,调用CreateFont的应用程序就和字体文件名建立联系了。

 

请使用浏览器的分享功能分享到微信等