加载中…
个人资料
OLEDB_戴锦新
OLEDB_戴锦新
  • 博客等级:
  • 博客积分:0
  • 博客访问:1,755
  • 关注人气:6
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

CFont类CreatePointFont和CreateFont

(2017-08-08 22:13:54)
标签:

戴锦新

cfont

createpointfont

createfont

分类: MFC
字体简介

       GDI(Graphics Device Interface),图形设备接口,是Windows提供的一些函数和结构,用于在显示器和打印机上显示图形。我们在MFC开发中经常会使用GDI来输出文本或图形图像(当然现在也有了GDI+,本教程主要讲解GDI)。文本实际上就是一种特殊的图形,它只不过是根据事先指定的“字体”绘制出来的图形。

       字体通常用来为字符集中每一个字符,如字母、数字、标点符号等,指定其形状等外表特征。窗口创建后,如果没有专门指定,一般会采用系统字体作为默认字体。我们可以使用API函数GetStockObject(SYSTEM_FONT)获得系统字体的句柄。

  CFont类

       CFont类封装了一个Windows图形设备接口(GDI)字体,并为操作字体提供了成员函数。

       为了使用CFont对象,首先构造一个CFont对象,再通过调用CreateFont、CreateFontIndirect、CreatePointFont或CreatePointFontIndirect将一个Windows字体与此CFont对象关联,然后使用此CFont对象的成员函数就可以操作字体了。

       一般使用CreatePointFont或CreatePointFontIndirect比使用CreateFont或CreateFontIndirect要更简便,因为前两者会自动的将字体高度的单位由点转换为逻辑单位。

       :“点”是传统计量字大小的单位,是从英文Point来的,一般用小写p表示,俗称“磅”。其换算关系为:1p=0.35146mm≈0.35mm,1英寸=72p。

       先简单解释下下面用到的几个概念:

       设备上下文是包含某个设备(如显示器、打印机)的绘制属性信息的Windows数据结构,有了它就可以在Windows中进行与设备无关的绘图,而不用考虑此设备是显示器还是打印机等。CDC类就是设备上下文类。

       在绘图时还经常会提到逻辑和物理,例如逻辑单位、物理单位,通俗点说,逻辑的就是与具体设备无关的,甚至我们可以自定义,物理的就是由具体设备决定的了。


CFont类为字体的操作提供了几个成员函数,下面是对其各个成员函数的详细介绍。

CreateFont、

CreateFontIndirect、

CreatePointFont、

CreatePointFontIndirect

 1、BOOL CreateFont(
     int nHeight,
     int nWidth,
     int nEscapenment,
     intnOrientation,
     int nWeight,
     BYTE bItalic,
     BYTE bUnderline,
     BYTE cStrikeOut,
     BYTE nCharset,
     BYTE nOutPrecision,
     BYTE nClipPrecision,
     BYTE nQuality,
     BYTE nPitchAndFamily,
     LPCTSTR lpszFacename
    );

返回值:如果成功,则返回非零值,否则为0。

参数:
nHeight                以逻辑单位方式指定字体的高度,字体高度可为以下值之一:
                             · 大于0,此时高度被转化为设备单位,与可用字体的网格高度相比较。
                             · 等于0,此时使用合理的缺省大小。
                             · 小于0,此时高度被转化为设备单位,而绝对值与可用字体的字符高度相比较。
                              nHeight绝对值在转化后不可超过16,384设备单位。在所有的高度对比中,如果字体超过
                              所要求的值,则字体映像器中大字体不会超过所需大小,小字体也不会超过。
 
nWidth                  指定字体中字符平均宽度(用逻辑单位)。如果为0,设备方向比率与可用字体的数字方向
                              比率相比较,找一个最近的匹配,它由值的差的绝对值决定。
 
nEscapement        指定偏离垂线与x轴在显示面上的夹角(用0.1度单位)。偏离垂线时从一行中开始一个字符
                              到最后一个字符的线,此角从x轴逆时针方向度量。
 
nOrientation         指定字符基线和x轴之间的夹角(用0.1度单位)。此度数在座标轴中由x轴逆时针方向度量
                              时坐标系中y轴向下,顺时针方向从x轴旋转时,y轴向上。
 
nWeight                指定字体磅数(用每1000点中墨点像素数计)。尽管nWeight可为0到1000中的任意整
                              数值,常用值和常数如下:
                              常数 值
                              FW_DONTCARE 0
                              FW_THIN 100
                              FW_EXTRALIGHT 200
                              FW_ULTRALIGHT 200
                              FW_LIGHT 300
                              FW_NORMAL 400
                              FW_REGULAR 400
                              FW_MEDIUM 500
                              FW_SEMIBOLD 600
                              FW_DEMIBOLD 600
                              FW_BOLD 700
                              FW_EXTRABOLD 800
                              FW_ULTRABOLD 800
                              FW_BLACK 900
                              FW_HEAVY 900
                              以上各值是大约数,实际外观依赖字体大小,有的字体仅有FW_NORMAL,
                              FW_REGULAR,FW_BOLD磅数。如果FW_DONTCARE被指定,则使用缺省磅数。
 
bItalic                    指定字体是否为斜体。
 
bUnderline            指定字体是否带下划线。
 
bStrikeOut             指定是否是字体字符突出。如果设置为非零,则突出。
 
nCharSet               指定字体的字符集,以下是预定义的常数和值:
                              常数 值
                              ANSI_CHARSET 0
                              DEFAULT_CHARSET 1
                              SYMBOL_CHARSET 2
                              SHIFTJIS_CHARSET 128
                              OEM_CHARSET 255 OEM字符集依赖于系统。
                              具有其它字符集的字体可能存在于系统之中。一个使用未知字符集字体的应用不能翻译或
                              解释一个以此字符集着色的字符串,相反,应将字符串直接输入到设备驱动。
                              字体映射器不使用DEFAULT_CHARSET值,一个应用可以使用此值让字体名和大小完全描述
                              逻辑字体。如果指定的名字不存在,为避免不可预料的结果,应用应谨慎地
                              使用DEFAULT_CHARSET。
 
nOutPrecision       指定所需的输出精度。输出精度定义输出与需要的字体高度、宽度,字符方向、
                              走格、间距之间的接近程度,可以为以下值之一:
                              OUT_CHARACTER_PRECIS OUT_STRING_PRECIS
                              OUT_DEFAULT_PRECIS OUT_STROKE_PRECIS
                              OUT_DEVICE_PRECIS OUT_TT_PRECIS
                              OUT_RASTER_PRECIS  应用在系统包含多个给定名字的字体时,
                              可用OUT_DEVICE_PRECIS,OUT_RASTER_PRECIS和OUT_TT_PRECIS值控制一个
                              字体映射器如何选择一种字体。例如,如果一个系统包含一个名叫Symbol的字体,以光栅
                              和TrueType形式存在,指定OUT_TT_PRECIS使字体映射器选择TrueType类型
                             (指定OUT_TT_PRECIS强制字体映射器选择TrueType字体(当指定字体名与一个设备或
                              光栅字体相匹配),即使没有同名的TrueType字体。
 
nClipPrecision        指定所需的剪贴精度。剪贴精度定义了如何剪贴部分超过剪贴范围的字符,可为以下值
                               之一:
                               CLIP_CHARACTER_PRECIS CLIP_MASK
                               CLIP_DEFAULT_PRECIS CLIP_STROKE_PRECIS
                               CLIP_ENCAPSULATE CLIP_TT_ALWAYS
                               CLIP_LH_ANGLES  要使用插入的只读字体,应用必须指定CLIP_ENCAPSULATE。
                               要建立设备旋转、TrueType和矢量字库,应用可以用OR操作符将CLIP_LH_ANGLES值
                               与其它nClipPrecision值组合。如果CLIP_LH_ANGLES位被设置,所有字体的旋转都
                               依赖于坐标系的定位是左手方向还是右手方向(要了解有关坐标轴定位的更多信息,
                               请参阅nOrientation参数的描述)。如果CLIP_LH_ANGLES未被设置,设置字体常
                               逆时针方向旋转,但其它字体的旋转依赖于坐标系的旋转定位。
 
nQuality                 指示字体的输出质量,定义了GDI必须使逻辑字体特性和物理字体特性相匹配的程度。
                               可为以下值之一:
                               DEFAULT_QUALITY 字体的外观无关紧要。
                               DRAFT_QUALITY 当PROOF_QUALITY使用时,字体的外观不太重要。对GDI光栅
                               字体来说,允许缩放。黑体、斜体、下划线、突出字体和综合处理在需要时可用。
                               PROOF_QUALITY 字体的字符质量比精确的逻辑字体特性的匹配更重要。对GDI光栅
                               字体,缩放无效,大小最接近的字体被选用。黑体、斜体、下划线、突出和综合处理在
                               需要时可用。
 
nPitchAndFamily    指定字体的间距和家族。两个低位指定字体的间距,可为以下值之一:
                               DEFAULT_PITCH、VARIABLE_PITCH、FIXED_PITCH
                               应用可以将T\MPF_TRUETYPE加到nPitchAndFamily参数中来选择一个TrueType字体。
                               高四位指定字体家族,可为以下值之一:
                              · FF_DECORATIVE 新奇字体,如以前英格兰的字体。
                              · FF_DONTCARE 不在意或不知道。
                              · FF_MODERN 笔型宽度不变的字体,有或无衬线。固定斜度的字体常是现代风格的,
                                如Pica,Elite和Courier New。
                              · FF_ROMAN 笔划宽度可变(接比例调整空间)及有衬线字体。如Times New Roman
                                和Century Schoolbook。
                              · FF_SCRIPT 与手写体相似的字体,如Script和Cursive。
                              · FF_SWISS 笔划宽度可变(接比例调整空间)及不带有衬线字体,如MS Sans Serif。
                              一个应用可用布尔操作OR指定一个nPithAndFamily值以组合一个斜体和一个家族常数。
                              字体家族用普通方式描述了字体的外观,它们在所需铅字体无效时用于定义指定的字体。
 
lpszFacenameCString                             或指向一个以空终止字符串的指针,字符串指定字体字样的名字。
                                                                此字符串的长度不能长于30个字符,WindowsEnumFontFamilies
                                                                函数可用于枚举所有当前可用字体。如果为NULL,
                                                                则GDI使用一个不依赖设备的字体。



2、BOOL CreateFontIndirect(const LOGFONT* lpLogFont);

       通过一个LOGFONT结构体变量给出的特征来初始化CFont对象。

       lpLogFont              是指向LOGFONT结构体变量的指针,此LOGFONT结构体变定义了逻辑字体的特征。

3、BOOL CreatePointFont(int nPointSize,LPCTSTR lpszFaceName,CDC* pDC = NULL);

       此函数提供了一种由指定字样和点数创建字体的简单方式。参数的意义如下:

       nPointSize:          指定字体高度,以十分之一点为单位。例如,nPointSize为120则表示是12点的字体。

       lpszFacename:    指定字体的字样名的字符串。此字符串的长度不应超过30个字符。Windows函数EnumFontFamilies可以枚举出当前所有可用字体的字样名。如果lpszFacename为NULL,则GDI使用一种与设备无关的字体。

       pDC:                    指向CDC对象,用来将nPointSize指定的高度转换为逻辑单位,如果为NULL,则使用屏幕设备上下文进行转换。

4、BOOL CreatePointFontIndirect(const LOGFONT* lpLogFont,CDC* pDC = NULL);

       此函数是通过指定的字样和点数创建字体的间接方式。参数lpLogFont指向一个LOGFONT结构体变量,此LOGFONT变量定义了逻辑字体的特征,它的lfHeight成员以十分之一点为单位,而不是逻辑单位。参数pDC指向CDC对象,用来将lfHeight表示的高度转换为逻辑单位,如果为NULL,则使用屏幕设备上下文进行转换。

       此函数与CreateFontIndirect很相似,但区别是LOGFONT变量中lfHeight成员的单位是十分之一点而不是逻辑单位。

5、static CFont* PASCAL FromHandle(HFONT hFont);

       由Windows GDI字体的HFONT句柄获得相应的CFont对象指针。参数hFont是一个Windows字体的HFONT句柄。成功则返回CFont对象的指针,否则返回NULL。

6、int GetLogFont(LOGFONT * pLogFont);

       获取CFont对象的LOGFONT结构体的拷贝。参数pLogFont指向用来接收字体信息的LOGFONT结构体变量。成功则返回非零值,否则返回零。

转自:http://www.jizhuomi.com/software129.html

0

阅读 收藏 喜欢 打印举报/Report
后一篇:自定义消息
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有