字体小谈:CreateFont和LOGFONT
2014年02月24日 ⁄ 综合 ⁄ 共 3719字 ⁄ 字号 小 中 大 ⁄ 评论关闭
typedef struct tagLOGFONT
{
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)或字符的高度。字符高度值为字符元高度值减去内部行距(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,则使用默认的字体重量。

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、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这些值的具体含义可以参考Visual C++中关于结构LOGFONT的文档。字符间距和字体族可以使用逻辑或(OR)运算符来进行组合。
lfFaceName: 一个指定以NULL结尾的字符串的指针,它指定的所用的字体名。该字符串的长度不得超过32个字符,如果lfFaceName为NULL,图形设备接口将使用默认的字体名。

BOOL CreateFont( int nHeight, int nWidth, int nEscapement, int nOrientation, int nWeight, BYTE bItalic, BYTE bUnderline, BYTE cStrikeOut, BYTE nCharSet, BYTE nOutPrecision, BYTE nClipPrecision, BYTE nQuality, BYTE
nPitchAndFamily, LPCTSTR lpszFacename );

参数说明:
nHeight :字体高度.>0:字体的高度值;=0:字体采用缺省直.<0:此值的绝对值为高度.
nWidth :字体宽度.
nEscapement :文本行的倾斜度.
nOrientation :字符基线的倾斜度.
nWeight :字体的粗细.如下:
.FW_DONTCARE
.FW_THIN
.FW_EXTRALIGHT
…..
bItalic :字体是否为斜体
bUnderline :字体是否带下划线
cStrikeOut :字体是否带删除线
nCharSet :字体的字符集
.ANSI_CHARSET
.DEFAULT_CHARSET
.SYMBOL_CHARSET
……
nOutPrecision :字符的输出精度
nClipPrecision :字符裁剪的精度
nQuality :字符的输出质量
nPitchAndFamily :字符间距和字体族(低位说明间距,高位说明字符族)
lpszFacename :字体名称

设置HDC的字体

首先,我们需要用CreateFont函数来设置一个HFONT句柄,然后把此句柄设置给我们需要的HDC.下面是CreateFont函数原形.

HFONT CreateFont(
int nHeight, //字体的高度
int nWidth, //字体的宽度
int nEscapement, //字体显示的角度
int nOrientation, //字体的角度
int nWeight, //字体的磅数
BYTE bItalic, //斜体字体
BYTE bUnderline, //带下划线的字体
BYTE cStrikeOut, //带删除线的字体
BYTE nCharSet, //所需的字符集
BYTE nOutPrecision, //输出的精度
BYTE nClipPrecision, //裁减的精度
BYTE nQuality, //逻辑字体与输出设备的实际
//字体之间的精度
BYTE nPitchAndFamily, //字体间距和字体集
LPCTSTR lpszFacename //字体名称
);

示例:

/**************************************************************/
HFONT hFont;
HDC hDC;
hFont=CreateFont(10,10,0,0,FW_THIN,true,false,false,
CHINESEBIG5_CHARSET,OUT_CHARACTER_PRECIS,
CLIP_CHARACTER_PRECIS,DEFAULT_QUALITY,
FF_MODERN,”宋体”);
SelectObject(hDC,hFont);
/**************************************************************/

字体小谈:CreateFont和LOGFONT相关推荐

  1. PHP的echo和print小谈

    自学php快2个多月了.学着做点东西,基本函数用的还凑合,用help点开加search找.基本没问题 不过那个php主页的说明实在是很模糊,很多参数说完了还是看不懂,有实践才有真理.这点到哪里都没有错 ...

  2. HTTP的⼏种请求⽅法及⽤途小谈(面试)

    HTTP的⼏种请求⽅法及⽤途小谈(面试) 1.GET ⽅法 其目的发送⼀个请求来取得服务器上的某⼀资源. 2.POST ⽅法 向 URL 指定的资源提交数据或附加新的数据. 3.PUT ⽅法 跟 PO ...

  3. android 2k 屏幕 字体模糊,显示字体小到有些模糊?高分屏别忘了这些设置

    原标题:显示字体小到有些模糊?高分屏别忘了这些设置 "BOSS,你这字体也太小了吧" "我才搞定新显卡,用上了2K屏" --好吧,小狮子不知趣地又拿BOSS开涮 ...

  4. DOSBOX窗口、字体小的解决办法

    DOSBOX窗口.字体小的解决办法(以DOSBOX0.72为例) 进入dosbox文件夹 找到bc31.conf用记事本打开编辑内容,如下图所示: 按照上图修改高亮区域4行代码即可.

  5. 日常小工具使用经验小谈

    日常小工具使用经验小谈 随时补充-- 1.什么PDF阅读器最好用? 知乎上总结推荐 福昕阅读器(Foxit Reader) Sumatra PDF PDFelement 轻快PDF阅读器 2.如何下载 ...

  6. 我们需要一颗强劲的心脏--小谈机房建设工程

    已发表在<网管员世界>   转载支持,批评更支持,另投就不支持喽!   我们需要一颗强劲的心脏<?xml:namespace prefix = o ns = "urn:sc ...

  7. Delphi 小谈之TList 篇

    Delphi 小谈之TList 篇 2010年08月23日 看了这里标题,大家可能以为我会谈TListBox控件,那就错了.我要谈的是Delphi提供给我们的具有列表性质的类:TstringList. ...

  8. photoshop 字体小_如何在Photoshop和Illustrator中设置默认字体

    photoshop 字体小 Photoshop and Illustrator are powerful, but not exactly intuitive. That goes double fo ...

  9. java jquery 框架_[Java教程]小谈Jquery框架

    [Java教程]小谈Jquery框架 0 2013-12-23 18:01:16 现在Jquery框架对于开发人员基本上是无人不知,无人不晓了,用起来十分的方便,特别是选择器十分强大,提高了我们的开发 ...

最新文章

  1. extjs中滚动条属性_十分钟快速了解 JS 中的 offset、scroll、client
  2. List-ArrayList 使用
  3. IPv6 OSPFv3路由协议(续二)
  4. 大数据_Hbase-API访问_Java操作Hbase_封装操作数据的工具类---Hbase工作笔记0015
  5. 四川大学锦城学院计算机考试题,四川大学锦城学院期考试试题(B卷)_15889.doc
  6. php有没有dao层,php框架开发四(DAO层)_PHP教程
  7. 联想教育应用使用说明(7.6版本)——第2章 联想教育应用的首次部署
  8. Ubuntu20.04下搜狗输入法安装配置(超精简)
  9. 智力题解题报告 No.4 9个点10个线
  10. 美国计算机专业大学排名前30,美国计算机专业研究生大学排名TOP30
  11. 简单动态字符串(SDS)
  12. 显性测试数据全对的WA之uva355(已AC)
  13. Springboot实现邮箱验证码注册、找回密码和登录功能
  14. 帆软公式如何用数据库字段_高考数学必背100招:如何用构造法求数列通项公式?...
  15. 你离大厂前端工作,升职加薪有时就差一点算法,今天全部教给你!
  16. excel无法打开文件,因为文件格式或文件扩展名无效
  17. 自己定义jquery插件轮播图
  18. SQL数据库损坏及恢复分析
  19. 计算机工作理想湿度,计算机理想的工作温度七月的盛夏,碧空中没有一丝云彩,只剩下纯(11)...
  20. 发行版中的i386/i686/x86-64的区别: i386用来处理32位系统,i686是i386的下集;x86-64用来处理64位系统。 linux发行版中的i386/i686/x86-64各自含

热门文章

  1. 世界主要国家地区下拉菜单三级联动1
  2. 如何用纯 CSS 绘制一个世界上不存在的彭罗斯三角形
  3. 用flash给人物侧面绘画
  4. armv7 tlb 概述
  5. ShaderWeaver使用教程-美化精灵动画
  6. win10更新后输入密码后无限循环解决方法
  7. 求N个数的最大公约数和最小公倍数
  8. 虚拟主机怎么转移服务器,虚拟主机的网站迁移方法
  9. 微软的 windows 的发展历程-潮起潮落
  10. java日历查询代码,java实现日历查询小程序