友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
第三电子书 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

VC语言6.0程序设计从入门到精通-第33部分

快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!


 CreateFont                初始化用指定特性定义的 CFont 对象  

 CreatePointFont           用指定高度(用 0。1 点)和字体初始化一个 CFont 对象  

 CreatePointFontIndirect   与 CreateFontIndirect 相似,但字体高度用 0。1 点定义而不用逻辑单位定义操作  

 FromHandle                当给定一个 Windows HFONT 时,返回一个指向 CFont 对象的指针  

 HFONT                     返回附加给 CFont 对象的 Windows GDI 字体句柄  

 GetLogFont                用附加给 CFont 对象的逻辑字体信息填充一个 LOGFONT  



      下面详细介绍常用的成员函数。  



      1.CFont::CreateFont()函数  



      可以调用该函数创建自定义字体,该函数声明如下:  



     BOOL CreateFont  



     (  



     int        nHeight;      



     int        nWidth;        



     int        nEscapenment;    



     int        nOrientation;    



     int        nWeight;  



     BYTE    bItalic;    



     BYTE    bUnderline;  



     BYTE    cStrikeOut;    



     BYTE    nCharset;  



     BYTE    nOutPrecision;    



     BYTE    nClipPrecision;    



     BYTE    nQuality;    



                                                                                                      ·147 ·  


…………………………………………………………Page 157……………………………………………………………

Visual C++ 6。0 程序设计从入门到精通  



    BYTE    nPitchAndFamily;  



    LPCTSTR lpszFacename  



    );  



    (1)nHeight  

    以逻辑单位方式指定字体的高度,字体高度可为以下值之一:  

    o  大于 0,此时高度被转化为设备单位,与可用字体的网格高度相比较;  

    o  等于 0,此时使用合理的默认大小;  

    o  小于 0,此时高度被转化为设备单位,而绝对值与可用字体的字符高度相比较。  

    nHeight  绝对值在转化后不可超过  16  384 设备单位。在所有的高度对比中,如果字体超 

过所要求的值,则字体映像器会寻找最大的或者最小的不超过所需大小的字体。  



    (2 )nWidth  

    指定字体中字符平均宽度(用逻辑单位 )。如果为 0,设备方向比率与可用字体的数字方 

向比率相比较,找一个最近的匹配,这个最近的匹配由值的差的绝对值决定。  



    (3 )nEscapement  

    指定偏离垂线与 x 轴在显示面上的夹角(用 0。1 度单位)。偏离垂线时从一行中开始一个 

字符到最后一个字符的线,此角从 x 轴逆时针方向度量。  



    (4 )nOrientation  

    指定字符基线和 x 轴之间的夹角(用 0。1 度单位)。此度数在坐标轴中由 x 轴顺时针度量 

时坐标系中 y 轴向下,顺时针方向从 x 轴旋转时,y 轴向上。  



    (5 )nWeight  

    指定字体磅数(用每 1000 点中墨点像素数计)。nWeight 可为 0 到 1000 中的任意整数值。  



    (6 )bItalic  

    指定字体是否为斜体。  



    (7 )bUnderline  

    指定字体是否带下划线。  



    (8)bStrikeOut  

    指定是否突出显示字符。如果设置为非零,则突出。  



    (9 )nCharSet  

    指定字体的字符集,预定义预定义字符集如表 6…3 所示。  



    表 6…3                          预定义字符集  



               常数                                       值  

 ANSI_CHARSET                      0  

 DEFAULT_CHARSET                   1  

 SYMBOL_CHARSET                    2  

 SHIFTJIS_CHARSET                  1280  

 EM_CHARSET                        255  



    OEM 字符集是和系统相关联的,而具有其它字符集的字体也可能存在于系统之中。一个 

使用未知字符集字体的应用不能翻译或解释一个以此字符集着色的字符串,相反,应将字符 

串直接输入到设备驱动。字体映射器不使用 DEFAULT_CHARSET 值,一个应用可以使用此 



 ·148 ·  


…………………………………………………………Page 158……………………………………………………………

                                                      第 6 章    文本和字体类  



值让字体名和大小完全描述逻辑字体。如果指定的名字不存在,为避免不可预料的结果,应 

用应谨慎地使用 DEFAULT_CHARSET 。  



    (10)nOutPrecision  

   指定所需的输出精度 。输出精度可定义需要的字体高度、宽度,字符方向、走格、间距之 

间 的 接 近 程 度 。 系 统 包 含 多 个 给 定 字 体 时 , 可 用        OUT_DEVICE_PRECIS  、 

OUT_RASTER_PRECIS 和 OUT_TT_PRECIS 值控制字体映射器如何选择字体。例如,如果 

一个系统包含一个名叫 Symbol 的字体,以光栅和 TrueType 形式存在,通过 OUT_TT_PRECIS 

可使字体映射器选择 TrueType 类型(指定 OUT_TT_PRECIS 强制字体映射器选择 TrueType 

字体)。  



    (11)nClipPrecision  

    指定所需的剪贴精度。剪贴精度用于定义如何剪贴部分超过范围的字符。要使用插入的 

只读字体,必须指定 CLIP_ENCAPSULATE 。要建立设备旋转、TrueType 和矢量字库,可以 

用 OR 操作符将 CLIP_LH_ANGLES 值与其他 nClipPrecision 值组合。如果 CLIP_LH_ANGLES 

位被设置,所有字体的旋转都根据坐标系的定位是左手方向还是右手方向来决定(要了解有 

关坐标轴定位的更多信息,请参阅 nOrientation 参数的描述)。如果 CLIP_LH_ANGLES 未被 

设置,设备字体按逆时针方向旋转,但其他字体的旋转依赖于坐标系的旋转定位。  



    (12)nQuality  

    指示字体的输出质量,定义了 GDI 必须使逻辑字体特性和物理字体特性相匹配的程度。 

可为以下值之一。  

    o  DEFAULT_QUALITY :字体的外观无关紧要。  

    o  DRAFT_QUALITY :当 PROOF_QUALITY 使用时,字体的外观不太重要 。对 GDI 光 

     栅字体来说,允许缩放。黑体、斜体、下划线、突出字体和综合处理在需要时可以综 

     合。  

    o  PROOF_QUALITY :字体的字符质量比精确的逻辑字体特性的匹配更重要。对  GDI 

     光栅字体,缩放无效,大小最接近的字体被选用。黑体、斜体、下划线、突出和综合 

     处理在需要时可以综合。  



    (13)nPitchAndFamily  

    指定字体的间距和家族。两个低位指定字体的间距,值可为:DEFAULT_PITCH                       或 

VARIABLE_PITCH 。FIXED_PITCH  应用可以将  TMPF_TRUETYPE  加到  nPitchAndFamily 

参数中,并选择一个 TrueType 字体。高四位指定字体家族,可为以下值之一。  

    o  FF_DECORATIVE :新奇字体,如以前英格兰的字体。  

    o  FF_DONTCARE :不在意或不知道。  

    o  FF_MODERN :笔型宽度不变的字体,有或无衬线。固定斜度的字体常是现代风格的, 

     如 Pica;Elite 和 Courier New 。  

    o  FF_ROMAN :笔划宽度可变(接比例调整空间)及有衬线字体。如 Times New Roman 

     和 Century Schoolbook 。  

    o  FF_SCRIPT :与手写体相似的字体,如 Script 和 Cursive 。  

    o  FF_SWISS :笔划宽度可变(接比例调整空间)及不带有衬线字体,如 MS Sans Serif 。  

    可用布尔操作 OR 指定一个 nPithAndFamily 值,以组合一个斜体和一个家族常数 。字体 



                                                                ·149 ·  


…………………………………………………………Page 159……………………………………………………………

Visual C++ 6。0 程序设计从入门到精通  



家族用普通方式描述了字体的外观,它们在所需铅字体无效时定义指定的字体。  



    (14)pszFacename  

    指定字体样式,可为 Cstring 型,或一个一空终止符结尾的字符串。此字符串的长度不能 

超过 30 个字符,Windows CE 中的 EnumFontFamilies 函数可用于枚举所有当前可用字体。如 

果为 NULL ,则 GDI 使用一个不依赖设备的字体。  

    总的说来,CreateFont 成员函数用于以指定的特征初始化一个 CFont 对象。此字体可被 

选作任何设备上下文的字体。CreateFont 函数不创建一个新 Windows GDI 字体,只是从 GDI 

物理字体库中选择最相近的匹配字体。当构造一个逻辑字体时,大部分参数可使用默认值。 

如果没有给定 nHeight 和 lpszFace Name,则逻辑字体是与设备有关的。当用 CreateFont 函数 

完成了一个 CFont 对象的创建时,先从设备环境中选出字体,然后删除 CFont 对象(字体定 

义完后就删除对象,以节省空间 )。  



    2 .CFont::CreateFontIndirect()函数  



    该成员函数以间接方式生成一个自定义字体,声明如下:  



    BOOL CreateFontIndirect(const LOGFONT* lpLogFont);  



    其中参数  lpLogFont  指向一个定义逻辑字体特征的  LogFont  结构。该函数用  lpLogFont 

指向的 LOGFONT 结构定义的特征初始化一个 CFont 对象,之后此字体即可被任何设备选作 

当前字体。此字体具有 LOGFONT 结构定义的特征。当使用 CDC::SelectObject 成员函数选择 

时,GDI 字体映射器将努力将逻辑字体和已存在的物理字体相匹配 。如果找不到匹配的逻辑 

字体,则尽可能找与之特性匹配最多的字体替代 。当用 CreateFontIndirect 函数完成 CFont 对 

象的创建后,先在设备环境中选出字体,然后删除 CFont 对象。  



    3 .CFont::CreatePointFont()函数  



    此函数用于创建指定字体和点的大小,声明如下:  



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



    参数意义如下:  

    o  nPointSize :指定所需字体高度(用 0。1 点表示,例如,传递 120 表示 12 点字体)。  

    o  lpszFaceName :定义字体名称,为 Cstring 型或指向一个以空终止符结尾的字符串。此 

     字符串长度不应超过 30 个字符。Windows CE 中的 EnumFontFamilies 函数可用于计算 

      当前可用字体的总数。如果为 NULL ,则 GDI 使用与设备无关的字体。  

    o  pDC :指向 CDC 对象,将 nPointSize 中的高度转化为逻辑单位。如果为 NULL ,则屏 

     幕设备环境用于转换。  

    该函数自动将 nPointSize  中的高度转化为逻辑单位,这是使用由 pDC 指向的 CDC 对象 

实现的。当完成用 CreatePointFont 函数创建 CFont 对象后,从设备环境中选择字体,然后删 

除 CFont 对象。  



    4 .CFont::CreatePointFontIndirect()函数  



    函数提供了一种创建指定字体和点大小的字体对象的间接方法,声明如下:  



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



 ·150 ·  


…………………………………………………………Page 160……………………………………………………………

                                                         第 6 章    文本和字体类  



    参数意义如下:  

    o  lpLogFont :指向 LOGFONT 结构,定义逻辑字体特征。LOGFONT 的 lfHeight 成员用 

     0。1 点计算而不用逻辑单位(如果设置 lfHeight 为 120,则要求 12 点字体)。  

    o  pDC :指向 CDC 对象,用于将 lfHeight 中的高度转化为逻辑单位。如果为 NULL ,屏 

     幕设备环境用于转换。  

    此函数与 CreateFontIndirect 相似,但 LOGFONT 的 lfHeight 成员由 0。1 点表示而不是用 

设备单位表示。在传递 LOGFONT 结构到 Windows 之前,pDC 指向的 CDC 对象自动使函数 

的 lfHeight 中的高度转化为逻辑单位。当完成由 CreatePointFontIndirect 函数创建的 CFont 对 

象之后,先选择设备环境字体,然后删去 CFont 对象。  



    5 .CFont::FromHandle()函数  



    该静态函数用于从 Windows GDI 的字体句柄得到对应CFont 对象指针的方法,声明如下:  



    static CFont* PASCAL FromHandle (HFONT hFont);  



    参数 hFont 代表 Windows 字体中的 HFONT 句柄。  

    当给定一个 Windows GDI 字体对象的 HFONT 句柄时,返回一个指向 CFont 对象的指针。 

如果 CFont 对象还未附加给句柄,将创建一个临时 CFont 对象,此临时 CFont 对象仅在事件 

循环中有空闲时才可用,此时临时图形对象被删除,换一种说法就是临时对象仅在一个窗口 

消息进程中才可用。  



6。3    文本输出过程  



    在定义了字体句柄、字体及字体颜色以后,就可以把设置的字体输出到相应的设备中。 

Windows 应用程序的文本输出过程比较复杂,除了要确定输出内容外,还要管理输出的格式, 

由应用程序完成窗口用户区管理,Windows 系统并不参与窗口用户区的管理,这样就加重了 

编写应用程序的负担。例如,在用户区内输出文本时,应用程序必须管理换行、后续字符的 

位置等输出格式,Windows 系统并东提供管理输出文本格式的函数。  

    文本的输出过程包括获取字体信息、格式化文本、调用函数输出文本等过程。  



    1.获取字体信息  



    应用程序在输出文本之前必须获取当前使用字体的有关信息,如当前使用的字符高度, 

以确定输出文本格式和下一行字符的输出位置。  

    Windows 程序中通常调用函数 GetTextMetrics 获取当前使用的字体信息。调用该函数时, 

系统将当前字体的信息拷贝到一个 TEXTMETRICS 结构的变量中。其形式为:  



    GetTextMetrics(hdc;&tm); //tm 为 TEXTMETRICS 结构  



    系统定义的 TEXTMETRICS 结构如下:  



    typedef struct tagTEXTMETRIC {    

返回目录 上一页 下一页 回到顶部 1 2
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!