第5章 文本与字体
第5 章
文本与字体
Windows经常使用 经常使用 GDI进行文本输出。在 进行文本输出。 进行文本输出 一定意义上, 一定意义上,任何内容 都可以看成图形实体 都可以看成图形实体
图形和文本并 没有明显的界限
使用定义好的与设备无关的字体集 使用定义好的与设备无关的字体集, Windows就能维 字体 就能维 护它的设备无关性,提供“所见即所得”的好处, 护它的设备无关性,提供“所见即所得”的好处,即屏幕 所见与设备输出的文本是一样的。 所见与设备输出的文本是一样的。先要获得文本句柄 文本 操作 设置字体、字符大小、 设置字体、字符大小、字符颜色等有关属性 将这些属性选入设备环境
5.1 设置文本的设备环境 5.1.1 字体句柄 描述所要显示
描述所要显示 的文本的大小、 的文本的大小、 类型和外形
Win 系统 提供了七种 基本字体
物理字体是为特殊设备设计的,因而是设备相关的 物理字体是为特殊设备设计的,因而是设备相关的 是为特殊设备设计的 设备相关 字体 逻辑字体定义的字符集是设备无关的 它可以精确标度, 逻辑字体定义的字符集是设备无关的,它可以精确标度,因 定义的字符集是设备无关 此得到广泛应用字体 ANSI_FIXED ANSI_VAR DEFAULT_GUI OEM_FIXED DEVICE_DEFAULT SYSTEM_FIXED SYSTEM 说明 ANSI标准的固定宽度的字体 标准的固定 标准的固定宽度的字体 ANSI标准的可变宽度的字体 标准的可变 标准的可变宽度的字体 当前GUI的默认字体 当前 的默认字体 由标准原设备制造商(OEM)提供 由标准原设备制造商 提供 当前图形设备的字体 Windows的标准固定宽度的字体 的标准固定 的标准固定宽度的字体 Windows提供的可变宽度的字体 提供的可变 提供的可变宽度的字体
常作为默认字体 Win用它作为 Win用它作为 系统界面字体
定义字体句柄变量: (1) 定义字体句柄变量: //hF为字体的句柄 HFONT hF; //hF为字体的句柄 选 择 系 统 字 体 的 步 骤
调函数GetStockObject GetStockObject获得系统字体句柄 (2) 调函数GetStockObject获得系统字体句柄 它返回的是系统的默认字体 ): hF= GetStockObject( ):
调用函数SelectObject SelectObject将字体选入设备环 (3) 调用函数SelectObject将字体选入设备环 境 SelectObject(hdc,hF); SelectObject(hdc,hF);
5.1.2 创建自定义字体若需要定义系统以外的字体,可以调用函数 自行创建 若需要定义系统以外的字体,可以调用函数GreateFont自行创建 自行 HFont=CreateFont //字体高度 字体高度, 采用系统默认值, (int nHeight, //字体高度,0采用系统默认值,使用逻辑单位 //字体宽度 字体宽度, int nWidth, //字体宽度,取0则由系统根据高宽比取最佳值 //每 文字相
对于页底的角度,单位为0.1 0.1度 int nEscapement, //每行文字相对于页底的角度,单位为0.1度 //每 文字相对于页底的角度,单位为0.1 0.1度 int nOrienation, //每个文字相对于页底的角度,单位为0.1度 //字体粗细度 范围为0 字体粗细度, DWORD nWeight, //字体粗细度,范围为0~1000 可选的系统字符集: 可选的系统字符集: //如果要求字体倾斜 如果要求字体倾斜, DWORD Dwltalic, //如果要求字体倾斜,则取非零 ANSI_CHARSET OEM_CHARSET //如果要求下划线 如果要求下划线, DWORD dwUnderline, //如果要求下划线,则取非零 SYMBOL_CHARSET //如果要求中划线 如果要求中划线, DWORD dwStrikeout, //如果要求中划线,则取非零 DEFAULT_CHARSET SHIFTJIS_CHARSET //字体所属字符集 DWORD dwCharset, //字体所属字符集 dwOutputPrecision,//输出精度 一般取默认值OUT_DEFAULT_PRECIS 输出精度, DWORD dwOutputPrecision,//输出精度,一般取默认值OUT_DEFAULT_PRECIS //剪裁精度 常取默认值CLIP_DEFAULT_PRECIS 剪裁精度, DWORD dwClipPrecision, //剪裁精度,常取默认值CLIP_DEFAULT_PRECIS //输出质量 一般取默认值DEFAULT_QUALITY 输出质量, DWORD dwQuality, //输出质量,一般取默认值DEFAULT_QUALITY //字体名 DWORD dwPitchAndFamily, //字体名 )
5.1.3 设置字体和背景颜色字体及背景颜色的设置在开发过 程中非常重要
设置字体颜色:SetTextColor(hdc,crColor); 设置字体颜色:SetTextColor(hdc,crColor); 设置背景颜色:SetBkColor(hdc,crColor); 设置背景颜色 SetBkColor(hdc,crColor); SetBkColor(hdc,crColor)
crColor为设置的颜色 crColor为设置的颜色
5.2 文本的输出过程 获取字体信息 确定后续文本坐标 文本输 出过程 格式化文本 确定换行时文本坐标 调用函数输出文本
获取字体信息输出文本之前要获取字体的信息, 输出文本之前要获取字体的信息,如字符高度 等,以确定输出格式和下一行字符的位置
(hdc,&tm);//tm TEXTMETRICS结构 tm为 GetTextMetrics (hdc,&tm);//tm为TEXTMETRICS结构获取当前使 用字体信息 调用该函数时, 调用该函数时,系统将当前 字体的信息拷贝到tm标识 字体的信息拷贝到 标识 TEXTMETRICS结构中 的TEXTMETRICS结构中
系统定义的TEXTMETRICS的结构如下: 的结构如下: 系统定义的 的结构如下typedef struct tagTEXTMETRIC { //tm //字符高度 LONG tmHeight; //字符高度 //字符基线以上高度 LONG tmAscent; //字符基线以上高度 //字符基线以下高度 LONG tmDescent; //字符基线以下高度 //tmHeight制订的字符高度顶部的控件 LONG tmInternalLeading; //tmHeight制订的字符高度顶部的控件 //行与行之间的间隔 LONG tmExternalLeading; //行与行之间的间隔 //平均字符宽度 LONG tmAveCharWidth; //平均字符宽度 //最大字符宽度 LONG tmMaxCharWidth; //最大字
符宽度 //字符的粗细度 LONG tmWeight; //字符的粗细度 //合成字体间附加的宽度 LONG tmOverhang; //合成字体间附加的宽度 //为输出设备设计的 为输出设备设计的X LONG tmDigitizedAspectX; //为输出设备设计的X轴尺寸 //为输出设备设计的 为输出设备设计的Y LONG tmDigitizedAspectY; //为输出设备设计的Y轴尺寸 //字体中第一个字符值 BCHAR tmFirstChar; //字体中第一个字符值 //字体中最后一个字符值 BCHAR tmLastChar; //字体中最后一个字符值 //代替不在字体中字符的字符 BCHAR tmDefaultChar; //代替不在字体中字符的字符 //作为分割符的字符 BCHAR tmBreakChar; //作为分割符的字符 //非 BYTE tmItalic; //非0则表示字体为斜体 //非 BYTE tmUnderlined; //非0则表示字体有下划线 //非 BYTE tmStruckOut; //非0则表示字符为删除字体 //字体间距和字体族 BYTE tmPitchAndFamily; //字体间距和字体族 //字符集 BYTE tmCharSet; //字符集 }TEXTMETRIC
格式化文本需要格式化 处理的情况 在文本行中确定后续文本的坐标 换行时确定下一行文本的坐标
(1) 确定后续文本坐标确定后续文本的坐标,应先获取当前的字符串的宽度 确定后续文本的坐标 应先获取当前的字符串的宽度, 该工作由 应先获取当前的字符串的宽度 GetTextExtentPoint32函数完成,并把它存储于一个 函数完成 结构中 函数完成,并把它存储于一个SIZE结构中。 结构 BooL GetTextExtentPoint32 ( HDC hdc, ,//指定的字符串 LPCTSTR lpszString,//指定的字符串 //字符串中的字符数 int nLength, //字符串中的字符数 //返回字符串宽度及高度的SIZE数据结构 返回字符串宽度及高度的SIZE数据结构 …… 此处隐藏:5177字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [高中教育]电子线路高频非线性部分2.1
- [高中教育]中班美术活动——我的小手
- [高中教育]常用三极管参数大全
- [高中教育]计算机常见故障及解决办法
- [高中教育]风机基础环水平度控制方法探讨
- [高中教育]机械安全工程(专升本)阶段性作业3
- [高中教育]2009年安徽省高考语文考试说明刍议
- [高中教育]unit5 let's eat公开课教案设
- [高中教育]计算机网络原理课后习题答案
- [高中教育]2016-2022年中国新能源市场研究与投资
- [高中教育]2015-2020年中国会议行业市场评估及投
- [高中教育]经销商大会峰会主持人串词开场白
- [高中教育]2014新版北师大数学三年级上册小熊购物
- [高中教育]七年级第一学期体育与健康全套教案
- [高中教育]第三章:国际金融市场
- [高中教育]六年级下册数学单元测试-2.比例 北师大
- [高中教育]2016年上海海事大学法学院624刑法之《
- [高中教育]中国碳化钙产业竞争现状及未来五年投资
- [高中教育]网络时代,我们怎么玩
- [高中教育]圆锥曲线——高中数学基础知识与典型例
- 高集医院世界艾滋病宣传日活动方案
- 苏教版六年级英语上册期末试卷含答案
- 全民枪战生化英雄模式幽灵怎么玩 生化
- 灿烂的宋元文化一导学案
- 第2章货币资金与应收款项
- 北师大版八年级下册数学第三章《分式》
- 浅析高分子材料成型加工技术
- 华南理工大学2013年度共青团先进集体及
- 教师资格科目二小学教案模板(共合集)
- 工程扩建可研报告
- 中华人民共和国海事局2014年度招录公务
- 提高农村小学生作文能力的教学尝试
- 徒手心肺复苏术操作步骤
- 毛概试题库7-15章
- 2014-2015学年度(上)初中班主任工作计
- 企业驾驶员安全生产责任书
- 第07章 不等式测试题-2016年高考文科数
- 医疗器械经营企业工作程序
- 考研英语必背36篇_彩版_精华
- 初中9月13-15假期作业 (1)




