现在的位置: 首页 > 综合 > 正文

CreateFont函数关于字符集与字体的两个参数

2013年11月03日 ⁄ 综合 ⁄ 共 1968字 ⁄ 字号 评论关闭

HFONT CreateFont(

  int nHeight,               // height of font

  int nWidth,                // average character width

  int nEscapement,           // angle of escapement

  int nOrientation,          // base-line orientation angle

  int fnWeight,              // font weight

  DWORD fdwItalic,           // italic attribute option

  DWORD fdwUnderline,        // underline attribute option

  DWORD fdwStrikeOut,        // strikeout attribute option

  DWORD fdwCharSet,          // character set identifier

  DWORD fdwOutputPrecision,  // output precision

  DWORD fdwClipPrecision,    // clipping precision

  DWORD fdwQuality,          // output quality

  DWORD fdwPitchAndFamily,   // pitch and family

  LPCTSTR lpszFace           // typeface name

);

对于fdwCharSetlpszFace两个参数以及他们的关系,刚开始不是很理解,所以google了一些资料,对这个问题有了一点自己的认识。fdwCharSet参数用来设置字符集,lpszFace用来确定显示字体。字符集说白了就是文字的集合,拿BIG5字符集来说,该字符集收入一万多个繁体汉字,八百多个符号,普遍使用于台湾、香港等地区。

字符其实是由二进制数字来表示的,通过映射表映射到字符集中的某个字符。换句话说,同一个二进制数字,在不同的字符集里可能就代表不同的字符。字符集是文字的集合,但字符集中的字符可能需要编码之后才能应用。比如GB2312可以使用ISO 2022EUC等标准进行编码,编码之后可以进行网络传输或处理等等。而字体,就是字的形体,也就是字的几何形状。比如,宋体字看起来比较正式,楷体字看起来比较飘逸。

Msdn中关于CreateFont函数有很详细的介绍:fdwCharSet参数可以设置为:

       ANSI_CHARSET

BALTIC_CHARSET

CHINESEBIG5_CHARSET

DEFAULT_CHARSET

EASTEUROPE_CHARSET

GB2312_CHARSET

GREEK_CHARSET

HANGUL_CHARSET

MAC_CHARSET

OEM_CHARSET

RUSSIAN_CHARSET

SHIFTJIS_CHARSET

SYMBOL_CHARSET

TURKISH_CHARSET

VIETNAMESE_CHARSET

下面看几种字符集的简单介绍。

         GB2313字符集,收入汉字6763个,符号715个,总计7478个字符,这是大陆普遍使用的简体字符集。楷体-GB2313、仿宋-GB2313、华文行楷等市面上绝大多数字体支持显示这个字符集。

       BIG-5字符集,收入13060个繁体汉字,808个符号,总计13868个字符(包括了无简体与繁体之分的传统传承汉字),目前普遍使用于台湾、香港等地区。台湾教育部标准宋体楷体等港台字体都支持这个字符集的显示。

         GBK字符集,又称大字符集,包含以上两种字符集汉字。收入21003个汉字,882个符号,共计21885个字符。Windows 95/98简体中文版就带有这个GBK.txt文件。宋体、隶书、黑体、幼圆、华文中宋、华文细黑、华文楷体、标楷体(DFKai-SB)Arial Unicode MSMingLiUPMingLiU等字体支持显示这个字符集。

       从这几个字符集的介绍中,也可以看出一个问题,就是字体对字符集有一个支持问题。我自己是这么理解的,比如某个字符集只包含有英文字符,那么宋体或者楷体就不支持这个字符集,因为宋体或者楷体是针对我们汉字来说的。这就可以解释msdn中给程序员的一个警示:“If you specify a typeface name in the lpszFace parameter, make sure that the fdwCharSet value matches the character set of the typeface specified in lpszFace.

      

 

抱歉!评论已关闭.