MFC字体

GDI字体分3类:点阵字体(raster font)、笔画字体(stroke font)和Truetype字体。

默认点阵字体有7种:

System         (用于SYSTEM_FONT)            无衬线    西方

                                                                有衬线    gb2312

Fixedsys        (用于SYSTEM_FIXED_FONT) 有衬线    gb2312

Terminal        (用于OEM_FIXED_FONT)       有衬线    gb2312

                                                                无衬线    OEM/DOS

                                                                无衬线    韩文

Courier                                                      有衬线    西方

MS Serif                                                     有衬线    西方

MS Sans Serif    (用于DEFAULT_GUI_FONT) 无衬线    西方

Small Fonts                                                 无衬线    西方

默认笔画字体有3种:

Modern                                                       无衬线    OEM/DOS

Roman                                                       有衬线    OEM/DOS

Script                                                         有衬线    OEM/DOS

默认TrueType字体有13种:

Courier New                   Arial

Courier New Bold            Arial Bold

Courier New Italic            Arial Italic

Courier New Bold Italic     Arial Bold Italic

Times New Roman           Symbol

Times New Roman Bold

Times New Roman Italic

Times New Roman Bold Italic

 

System本身就是粗体,还有粗斜体。

Arial是无衬线,其他12种TrueType字体都是有衬线。

在TrueType字体中可能只有Arial Unicode MS支持东方语言。比如简体中文、繁体中文、韩文。

 

在范例代码里面用库存字体SYSTEM_FIXED_FONT得到的是Fixedsys。而默认的SYSTEM_FONT是System。使用OEM_FIXED_FONT得到的是Terminal。

void CMainWindow::OnPaint()

{

  CPaintDC dc(this);

  dc.SelectStockObject(SYSTEM_FIXED_FONT);

  //dc.SelectStockObject(OEM_FIXED_FONT);

  dc.GetTextFace(strTextFace);

  dc.TextOut(10,10,"SYSTEM_FIXED_FONT");

  //dc.TextOut(10,10,"SYSTEM_FONT");

  //dc.TextOut(10,10,"OEM_FIXED_FONT");

  dc.TextOut(10,30,strTextFace);

 

  dc.GetTextMetrics(&tm);

  //别的代码

}

    

建立逻辑字体一般用CreateFont函数和CreateFontIndirect函数。这2个函数声明如下:

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

);

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, *PLOGFONT;

BOOL CreateFontIndirect(const LOGFONT* lpLogFont);

 

从以上声明看到CreateFontIndirect函数其实是CreateFont函数的简化。直接参数转换成结构。下面用CreateFont函数版本来解释需要的参数。

nHeight参数“这是以逻辑单位表示希望得到的字符高度。”有3种可能的值:

①大于0。高度被转换为设备单位。“它和TEXTMETRIC结构的tmHeight字段值近似相等(有时会有微小的不同,那是由于四舍五入带来的误差)”。“它表示该高度包含内部间隔tmInternalLeading(但不包含外部间隔tmExternalLeading)”。

②等于0。“默认字符高度”、“使用合理的缺省值”。

③小于0。负数。“它大致等于TEXTMETRIC结构的tmHeight字段减去tmInternalLeading”。“当它为负数时,Windows会将其绝对值作为字体的高度。这是一个很重要的区别:如果想要某一特定字号的字体,应该先把该字号转换成逻辑单位,然后把nHeight设定为该值的相反数,Windows就会反向查找到你想要的字号。”

下图介绍tmHeight、tmAscent、tmInternalLeading、tmExternalLeading的含义。

上图截图自《Windows程序设计(第5版,珍藏版)》(美)Charles Petzold著。里面的第73页。

tmExternalLeading并没有在上图中。具体可见第776页的“17.2.5行间距和字间距”这一节。

nWidth参数“这是以逻辑单位表示希望得到的字符宽度。”

nEscapement参数表示字符串水平基线逆时针偏离角度大小。以0.1°为单位。

nOrientation参数表示单个字符水平基线逆时针偏离角度大小。以0.1°为单位。

nWeight表示宽度。大部分都是400。System本身就是黑体,所以是700。

bItalic表示是否是斜体。

bUnderline表示是否有下划线。

bStrikeOut表示是否有删除线。

nCharSet表示字符集。

nOutPrecision表示输出精度。

nClipPrecision表示剪切精度。

nQuality表示字体输出质量。

nPitchAndFamily表示是否变宽等宽字体和字形集。

lpszFacename表示字样名称。

转载于:https://www.cnblogs.com/sishenzaixian/p/5072926.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/262282.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

decimal double java_Java BigDecimal和double BigDecimal类

BigDecimal类对于不需要任何准确计算精度的数字可以直接使用float或double,但是如果需要精确计算的结果,则必须使用BigDecimal类,而且使用BigDecimal类也可以进行大数的操作。BigDecimal类的常用方法如表11-15所示。表11-15 BigDecimal类的常…

分享45套2011年和2012年的高质量免费网站模板

日期:2012-11-11 来源:GBin1.com 前端时间我们分享了12套超酷的后台管理员界面网站模板,相信看过的朋友肯定已收入囊中了,今天呢,我们继续推荐45套高质量的免费网站模版,相信如果需要自己搭建网站的朋友肯…

水晶报表中对某一栏位值进行处理_【节能学院】能耗管理系统在某超市嘉兴店二期工程的设计与应用...

摘要:随着社会生活水平的提高,经济的繁荣发展,人们对能源的需求逐渐增长,由此带来的能源危机日益严重。学校建筑如何实时的了解、分析和控制学校的能源消耗已成为需要解决的迫在眉睫的难题。传统的能源消耗智能以月/季度/年为周期…

python数据分析天气预报论文_用python+sklearn(机器学习)实现天气预报数据 模型和使用...

项目地址系列教程0.前言在上一篇教程里我们已经获取了所需要的全部数据,包括训练数据集和测试数据集,使用ProcessData()调用,所以接下来写模型的建立和预测1.建立模型没段代码在文章后面都会整合成一段,分段展示只是便于阅读a.准备…

偶然在网上看到的题目,jQuery功底如何一测便知晓!!!!!!

笔者最终实现的效果如下:    参考答案下载地址 通过手写html代码实现如图效果:以下题目全部使用jQuery来做 当点击“加载数据”按钮时根据提供的数据通过jQuery动态创建表格数据填充该表格。数据见data.txt文件。效果如图: 当点击“设置样…

ps作业素材和成品_没有用过PS的画框工具,你还敢说你是设计大佬?

大家好,过完春节大伙们都踏上了离乡的征程,再多不舍,看看自己的钱包,还是要出发!2019年已经悄然过去一个半月,你的学习计划开始了嘛?来吧继续学习PS-cc2019,今天继续给大家带来CC2019 ps 的基础…

第二次阅读作业

No Silver Bullet - Essence and Accidents of Software Engineering: 银弹能杀死狼人。如果我没记错的话,在漫画中柯南对黑暗组织而言就是一颗银弹。生活中是不是真的有银弹我还是不太确定。假如有,银弹就是 一点弱点也没有么?如…

Linux 每日一练习!!反单引号·(键盘上数字1左边)··

2019独角兽企业重金招聘Python工程师标准>>> ls -al locate ls # 说明locate ls执行出来的路径将会作为ls -al的参数 说明:在一串指令中,在之内的指令将会被先执行,而且执行出来的结果将作为外部的输入信息 转载于:https://my.osc…

docker-compose观察实时日志_大数据项目实战之在线教育(03实时需求) - 十一vs十一...

第1章Spark Streaming概念 Spark Streaming 是核心Spark API的扩展,可实现实时数据的可扩展,高吞吐量,容错处理。数据可以从许多来源(如Kafka,Flume,Kinesis,或TCP套接字)中获取,并可以使用高级函数进行处理,处理完后的…

Java动态加载类在功能模块开发中的作用

Java中我们一般会使用new关键字实例化对象然后调用该对象所属类提供的方法来实现相应的功能,比如我们现在有个主类叫Web类这个类中能实现各种方法,比如用户注册、发送邮件等功能,代码如下: 1 /*2 * web功能实现类3 */4 public c…

创业者们的19个Surprises

郑昀玩聚SR 20091115 『毫无疑问,短跑运动员在起跑时速度最快,而后就变慢下来, 获胜者是变慢得最少的那个人。大多数创业公司也是如此。』 ——Paul Graham January 2007 上面这句笺言的作者Paul Graham最近问了Y Combinator旗下创业项目的创…

自学电脑编程_程序人生:盲人程序员蔡勇斌——用耳朵打开盲人的程序世界 - 沐歌爱编程...

有句话说:没有你想不到,只有你做不到。今天想为大家介绍一位程序员界中的励志人物,他就是蔡勇斌。蔡勇斌幼年失明,靠着顽强的毅力和不服输的精神自学编程,成为了一名全栈工程师。他是阿里“多隆奖”首位盲人获得者&…

SQLite轻量级数据库,操作数据常用语句

2019独角兽企业重金招聘Python工程师标准>>> -----创建表---- ----------表格头英文换中文显示select name as 名字,age 年龄,class from student -----if not exists判断表存在否--字符串用char也行--- --如果用自增长,只能用包装类型integer,不能用int…

cuda编程_CUDA编程入门(四)并行归约算法

这一篇我们一起学习一下如何使用CUDA实现并行归约算法。首先我们要知道什么是并行归约。并行归约(Reduction)是一种很基础的并行算法,简单来说,我们有N个输入数据,使用一个符合结合律的二元操作符作用其上,…

csgo怎么控制电脑玩家_电脑怎么远程控制他人电脑,教您给电脑设置远程控制的方法...

有些时电脑出现了一些我们解决不了的问题时,这时我们一定第一时间想到就是让电脑高手帮忙看一下问题;但要对方在异地该办呢,那就通过电脑远程来解决了;那么问题又来了,电脑怎么远程控制他人电脑呢?小编下面…

div悬浮在固定位置_悬浮式超声波致动器概要及研究动向

作者:东京工业大学 中村 健太郎1. 序言以往的超声波马达是通过摩擦力驱动,固定片压电振子与转子接触,通过振动摩擦转子从而获得旋转力和推动力。虽然具有高转矩、高控制性等特点,从原理上讲其速度无法超过振子振动速度。压电振子的…

基于Java的设计开题报告_基于Java的电子邮件的收发系统的设计与实现开题报告...

基于Java的电子邮件的收发系统的设计与实现开题报告 (8页)本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!9.90 积分开题报告 基于 Java 的电子邮件的收发系统的设计与实现 一、选题的背景、意义 1、 电…

Zookeeper-源码启动

源码启动zookeeper zookeeper源码下载地址: //选择分支3.5.8 https://github.com/apache/zookeeper.git 源码导入idea后,org.apache.zookeeper.Version类会报错,需要建一个辅助类 //全局搜索org.apache.zookeeper.Version这个类就找到了…

pandas 取excel 中的某一列_Excel快速分表(xlwings+pandas)

Excel总表快速分表:step1: 读取exel数据到DataFramestep2: dataframe中数据进行筛选step3:将筛选完的数据存储到excel中工作中应用实例step1:读取Excel的数据到pandas 的Dataframe方法1:采用pandas,读取sheet1的内容到…

通过点击切换文本框内容的脚本示例

定义一个字符串为内容的数组,每一行的多个文本框为一组,要求点击切换内容,且内容不重复. 代码 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">2 <html>3 <head>4 <title>New Document </title>5 <script>6 …