dc。SelectObject(pOldFont);
}
图9。 6 示例程序BrushDemo的运行结果
以前几节讲述的方法编译并链接上面的应用程序,运行结果如图9。6
所示。
第四节 字体对象
MFC类CFont封装了Windows图形设备接口中的字体对象。字体对象决
定的设备上下文中进行文本输出的字符样式。在使用字体对象的时
候,我们一般先创建一个CFont对象,然后调用CreateFont、
CreateFontIndirect、CreatePointFont及CreatePointFontIndirect
之一的成员函数来对该字体对象进行初始化。
9。4。1 创建字体对象
创建字体对象的最方便的方法是使用CreatePointFont函数,
CreatePointFont函数仅需三个参数,其原型如下:
BOOL CreatePointFont( int nPointSize; LPCTSTR lpszFaceName; CDC* pDC = NULL );
第一个参数nPointSize以十分之一磅为单位设置字体的大小,磅是印
刷行业中的常用度是单位,1磅=1/72英寸≈0。03528厘米。磅这个单
位在涉及图形和文本输出的Windows应用程序中被大量的使用,因此
我们应该熟知它和其它常用度量单位之间的换算关系。在后面的部分
中我们还会讨论到在Windows编程中还会使用到的其它度量单位以及
…………………………………………………………Page 550……………………………………………………………
它们之间的换算关系。
参数lpszFaceName指定了创建字体对象所使用的字体名,pDC指向一
个设备上下文对象,函数CreatePointFont将以磅表示的字体大小转
换为pDC所指向的设备上下文中相应的逻辑单位。如果指针pDC为空,
函数CreatePointFont将字体大小以设备单位表示。
9。4。2 LOGFONT结构
在Windows内部,字体是以一个名为LOGFONT的结构来表示的。结构
LOGFONT的定义如下:
typedef struct tagLOGFONT { // lf
LONG lfHeight;
LONG lfWidth;
LONG lfEscapement;
LONG lfOrientation;
LONG lfWeight;
BYTE lfItalic;
BYTE lfUnderline;
BYTE lfStrikeOut;
BYTE lfCharSet;
BYTE lfOutPrecision;
BYTE lfClipPrecision;
BYTE lfQuality;
BYTE lfPitchAndFamily;
TCHAR lfFaceName'LF_FACESIZE';
} LOGFONT;
各成员的含义如下:
lfHeight: 以逻辑单位指定字体字符元
(character cell)或字符的高
…………………………………………………………Page 551……………………………………………………………
度。字符高度值为字符元高度值
减去内部行距 (internal
leading)值。当lfHeight大于0
时,字体映射程序将该值转换为
设备单位,并将它与可用字体的
字符元高度进行匹配;当该参数
为0时,字体映射程度将使用一个
匹配的默认高度值;如果参数的
值小于0,则将其转换为设备单
位,并将其绝对值与可用字体的
字符高度进行匹配。
对于任何一种情况,字体映射程
度最终得到的字体高度值不会超
过所指定的值。以MM_TEXT映射模
式下,字体高度值和磅值有如下
的换算公式:
lfHeight=…MulDiv(PointSize;
GetDeviceCaps(hDC; LOGPIXELSY); 72);
lfWidth: 以逻辑单位指定字体字符的平均
宽度。如果lfWidth的值为0,则
根据设备的纵横比从可用字体的
数字转换纵横中选取最接近的匹
配值,该值通过比较两者之间的
差异的绝对值得出。
lfEscapement: 以十分之一度为单位指定每一行
文本输出时相对于页面底端的角
度。
ifOrientation: 以十分之一度为单位指定字符基
线相对于页面底端的角度。
lfWeight: 指定字体重量。在Windows中,字
体重量这个术语用来指代字体的
粗细程度。lfWeight的范围为0到
1000,正常情况下的字体重量为
400,粗体为700。如果lfWeight
为0,则使用默认的字体重量。
…………………………………………………………Page 552……………………………………………………………
lfItalic: 当lfItalic为TRUE时使用斜体
lfUnderline: 当lfUnderline为TRUE时给字体添
加下划线
lfStrikeOut: 当lfStrikeOut为TRUE时给字体添
加删除线
lfCharSet: 指定字符集。可以使用下面的预
定义值:
ANSI_CHARSET
OEM_CHARSET
SYMBOL_CHARSET
UNICODE_CHARSET
其中OEM字符集是与操作系统相关
的。
lfOutPrecision: 指定输出精度。输出精度定义了
输出与所要求的字体高度、宽
度、字符方向等的接近程度。它
可以为下面的值之一:
OUT_CHARACTER_PRECIS
OUT_DEFAULT_PRECIS
OUT_STRING_PRECIS
OUT_STROKE_PRECIS
lfClipPrecision: 指定剪辑精度。剪辑精度定义了
当字符的一部分超过剪辑区域时
对字符的剪辑方式,它可以为下
列值之一:
CLIP_CHARACTER_PRECIS
CLIP_DEFAULT_PRECIS
…………………………………………………………Page 553……………………………………………………………
CLIP_STROKE_PRECIS
lfQuality: 定义输出质量。输出质量定义了
图形设备接口在匹配逻辑字体属
性到实际的物理字体的所使用的
方式,它可以为下列值之一:
DEFAULT_QUALITY (默认质量)
DRAFT_QUALITY (草稿质量)
PROOF_QUALITY (正稿质量)
lfPitchAndFamily: 指定字体的字符间距和族。最低
两位指定字体的字符间距为以下
值之一:
DEFAULT_PITCH
FIXED_PITCH
VARIABLE_PITCH
第4到7位指定字体族为以下值之
一:
FF_DECORATIVE
FF_DONTCARE
FF_MODERN
FF_ROMAN
FF_SCRIPT
FF_SWISS
这些值的具体含
小说推荐
- 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章