友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

C语言实例教程(PDF格式)-第119章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




举系统中的所有字体,我们将第二个参数设置为NULL;第三个参数为 

枚举字体回调函数,这里为EnumFontFamProc,我们将在下面定义该 

回调函数;第四个参数为指向列表框的指针,这个参数将被传递给回 

调函数,由于我们需要将可用的字体添加到列表框中,因此我们可以 

很自然的将指向该列表框指针当前应用程序提供的参数传递给枚举字 

体回调函数。  



枚举字体回调函数的原型在程序中被声明为  



int WINAPI EnumFontFamProc(const LOGFONTA *lplf;   



const TEXTMETRICA *lptm; unsigned long FontType; LPARAM lParam);  


…………………………………………………………Page 563……………………………………………………………

  l 注意:  



  l 在随Visual C++ 5。0提供的Platform SDK (即Win32 SDK)中所给 

    出的EnumFontFamProc的原型为  



  l int CALLBACK EnumFontFamProc( ENUMLOGFONT FAR *lpelf; // pointer to logical

    font data  



  l NEWTEXTMETRIC FAR *lpntm; // pointer to physical…font data  



  l int FontType; // type of font  



  l LPARAM lParam // address of application…defined data  



  l );  



        然而在本程序中使用上面所给的原型将会在编译时导致类型 

        不匹配。正确的回调函数的原型应该如代码清单中所给的那 

        样。  



            



                                                



                   图9。 7 示例程序FontDemo的运行结果  



在本程序中,传递给回调函数的第一个参数lplf为该字体对应的 

LOGFONTA结构,最后一个参数为指向列表框的CListBox指针。第二个 

参数和第三个参数在本程序中没有使用。在本程序中,枚举字体回调 

函数的结构很简单,它只是将字体的字体名和相应的字符集格式化之 

后添加到列表框中。为了使枚举继续进行,回调函数应该返回真值, 

如果回调函数返回了FALSE,则枚举的过程将被终止。  



示例程序FontDemo的运行结果如图9。7所示。  


…………………………………………………………Page 564……………………………………………………………

在类CDC中定义的字体和文本函数如表所示。  



                表9。 5 在类CDC中定义的字体和文本函数  



       成员函数                描述  



       TextOut             在指定位置以当前选定字体绘制字符串  



       ExtTextOut          在指定的矩形区域内使用当前选定字体 

                           绘制字符串  



       TabbedTextOut       以指定的位置绘制字符串,并按指定的 

                           制表符位置扩展字符串的制表符  



       DrawText            在指定的矩形区域内绘制格式化文本  



       GetTextExtent       使用当前字体中属性设备上下文中计算 

                           一行文本的宽度和高度  



       GetOutputTextExtent  在输出设备上下文中计算一字符串的宽 

                           度和高度  



       GetTabbedTextExtent  在属性设备上下文中计算一字符串的宽 

                           度和高度  



       GetOutputTabbedTextExtent  在输出设备上下文中计算一字符串的宽 

                           度和高度  



       GrayString          在指定位置绘制变灰的文本  



       GetTextAlign        获得文本对齐标志  



       SetTextAlign        设置文本对齐标志  



       GetTextFace         将当前字体的字体名拷贝到缓冲区  



       GetTextMetrics      从属性设备上下文中获得当前字体的度 

                           量值  



       GetOutputTextMetrics  从输出设备上下文中获得当前字体的度 

                           量值  



       SetTextJustification  在字符串的分隔字符处添加空白  



       GetTextCharacterExtra  获得字符间空白的当前设置  



       SetTextCharacterExtra  设置字符间空白的当前设置  



       GetFontData         从可缩放字体文件中获取字体信息。所 

                           获取的信息通过指定字体文件中的偏移 

                           量和返回信息的长度来确定  


…………………………………………………………Page 565……………………………………………………………

      GetKerningPairs  在选定的设备上下文中获得当前选定字 

                       体的字距调整字符对  



      GetOutlineTextMetrics  获得TrueType字体的字体度量信息  



      GetGlyphOutline  返回当前字体的字符的轮廓曲线或位图  



      GetCharABCWidths  从当前字体中以逻辑单位返回给定范围 

                       的连续字符的宽度  



      GetCharWidth     从当前字体中返回给定范围的连续字符 

                       的相对宽度  



      GetOutputCharWidth  从输出设备上下文中的当前字体返回连 

                       续字符组中若干单个字符的宽度  



                                              续表9。5 



      成员函数          描述  



      SetMapperFlags  改变字体映射程序中从逻辑字符到物理字体 

                    的映射过程中所使用的算法  



      GetAspectRatioFilter  获得当前纵横比过滤器的设定  



在一些应用程序 (如字处理应用程序)中,我们一般需要由用户来指定 

所使用的字体。这时常使用的方法是弹出一个字体对话框,用户通过 

该字体对话框来设置应用程序所使用的字体。MFC类CFontDialog封装 

了标准的Windows字体对话框。在最简单的情况下,我们只需要声明 

一个类的实例对象CFontDialog,然后通过该对象调用类CFongDialog 

的成员函数DoModal,如果该成员函数返回IDOK,则通过成员函数 

GetCurrentFont将用户所选择的字体信息填入一个LOGFONT结构中, 

在下面的过程中即可通过该结构创建CFont对象。在很多情况下,我 

们需要为字体对话框设置一些初始值,一种很简单的方式在其构造函 

数中传递一个指向LOGFONT结构对象的指针。我们可以在创建 

CFontDialog对象之后,调用DoModal成员之前改变其类型为 

CHOOSEFONT的成员结构m_cf的各成员的值来为字体对话框进行初始设 

置。  



9。4。4 创建特殊的字体效果  



在一般的应用程序中,我们可以使用SetBkMode和SetBkColor来设置 

绘制文本所使用的颜色和模式,但是,这两个函数所设置的效果是很 

有限的。有时候我们可能希望得到一些特殊的文本输出效果。这时我 


…………………………………………………………Page 566……………………………………………………………

们就应该考虑其它特殊的实现方式。使用路径是其中的一种方法。下 

面我们讲述一些使用路径得到的特殊的字体效果。  



     (1) 空心字  



在开始一个路径前,我们先调用CDC类的成员函数BeginPath,然后调 

用一系列的输出函数,在完成绘制之后,我们可以调用CDC类的成员 

函数EndPath。在完成一个路径之后,我们可以调用StrokePath来绘 

制该路径。为了简单起见,我们仅给出应用程序的OnPaint成员函数 

如下:  



// 应用程序主窗口的重绘函数  



void CMyWnd::OnPaint()  



{  



// 获得窗口的客户区设备上下文句柄  



CPaintDC dc(this);  



// 更改当前字体  



LOGFONT lf;  



dc。GetCurre
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!