举系统中的所有字体,我们将第二个参数设置为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
小说推荐
- C语言游戏编程从入门到精通(PDF格式)
- -Page 1-Page 2-Page 3-Page 4-Page 5-Page 6-Page 7-Page 8-Page 9-Page 10-Page 11-Page 12-Page 13-Page 14
- 其他
- 最新章:第4章
- JMS简明教程(PDF格式)
- -Page 1-JMS1.1规范中文版卫建军2007‐11‐22-Page 2
- 其他
- 最新章:第28章
- SQL语言艺术(PDF格式)
- -Page 1-SQLSSQQLL语言艺术内容介绍本书分为12章,每一章包含许多原则或准则,并通过举例的方式对原则进行解释说明。这些例子大多来自于实际案例,对九种SQL经典查询场景以及其性能影响讨论,非常便于实践,为你数据库应用维护人员阅读。资深 SQL 专家 Stéphane Faroult倾力打
- 其他
- 最新章:第27章
- 软件工程实践者的思想(PDF格式)
- -Page 1-大 道 至 简—软件工程实践者的思想周爱民(Aimingoo 著-Page 2-序2004 年 11 月初爱民(Aimingoo)第一次把他的书稿给我,我翻看了一下,第一反应讲的是感想。这不错,在技
- 其他
- 最新章:第26章
- asp基础实用教程(DOC格式)
- 目 录一、关于ASP二、ASP的新功能三、创建ASP页四、使用脚本语言五、使用变量和常量六、使用集合七、ASP内建对象八、向浏览器发送内容九、包含文件十、访问数据库十一、调试ASP脚本十二、维护ASP应用程序的安全一、关于ASP Active Server Pages(ASP)是服务器端脚本编写环境
- 其他
- 最新章:第17章
- Linux实用培训教程(PDF)
- -Page 1-rrktqt的个人空间 Linux实用培训教程第一部分 作者:红联Linux实用培训教程第一部分-共三部分解的Linux知识,循序渐进的介绍Linux相关知识,从入门到提高,希望对所有学习Linux的朋友都有帮助 红联Linux论坛是致力于Linux技术讨论的站点,目前网站收录的文章
- 其他
- 最新章:第42章
- php程序设计简明教程(DOC格式)
- -Page 1-PHP 程序设计简明教程PHP 讲义 第 1 页 共 90 页-Page 2-目录序 4第一章 PHP 简介 6
- 其他
- 最新章:第31章
- 路由器基本知识及应用实例(DOC格式)
- 第二章 路由器第一节 路由器发展概述自从1984年问世至今,路由器已经走过了近20年的快速技术发展历程。路由器的应用领域不断扩展、从单一的互通网关逐渐扩展到覆盖广域网、城域网乃至用户接入的各个领域。近年来,路由器早已逐渐脱离单纯用于企业网出口和互联的概念,开始成为运营网络和各种专用业务网络的核心设备
- 其他
- 最新章:第48章
- Java编程思想第4版[中文版](PDF格式)
- -Page 1-Page 2《Thinking In Java》中文版作者:Bruce Eckel主页:http/BruceEckel.编译:Trans Bot主页:http/memberease~transbot致谢-献给那些直到现在仍在孜孜不倦创造下一代计算机语言的人们!指导您利用万维网的语言进
- 其他
- 最新章:第295章