Visual C++教学课件:第3章 文本与字体_第1页
Visual C++教学课件:第3章 文本与字体_第2页
Visual C++教学课件:第3章 文本与字体_第3页
Visual C++教学课件:第3章 文本与字体_第4页
Visual C++教学课件:第3章 文本与字体_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、教学重点教学重点1、文本设备环境、文本设备环境 字体(系统、自定义)、文本颜色、背景色字体(系统、自定义)、文本颜色、背景色2、文本输出基本操作、文本输出基本操作 文本格式化、文本输出函数文本格式化、文本输出函数第第3章章 文本与字体文本与字体 lWindows经常使用经常使用GDI进行文本输出。进行文本输出。l在一定意义上,任何内容都可以看成图形在一定意义上,任何内容都可以看成图形实体,图形和文本并没有明显的界限。实体,图形和文本并没有明显的界限。l使用定义好的与设备无关的字体集,使用定义好的与设备无关的字体集, Windows就能维护它的设备无关性,提供就能维护它的设备无关性,提供“所见即

2、所得所见即所得”的好处,即屏幕所见与设的好处,即屏幕所见与设备输出的文本是一样的。备输出的文本是一样的。 第第3章章 文本与字体文本与字体 3.1 文本设备环境文本设备环境1、系统字体、系统字体 字体:描述所要显示的文本的大小、字体:描述所要显示的文本的大小、类型和外形。类型和外形。 物理字体:是为特殊设备设计的,因物理字体:是为特殊设备设计的,因而是设备相关的;而是设备相关的; 逻辑字体:定义的字符集是设备无关逻辑字体:定义的字符集是设备无关的,它可以精确标度,因此得到广泛应用。的,它可以精确标度,因此得到广泛应用。第第3章章 文本与字体文本与字体 3.1 文本设备环境文本设备环境-系统字体

3、系统字体 第第3章章 文本与字体文本与字体 字体字体说明说明ANSI_FIXED_FONTANSI标准的固定宽度的字体标准的固定宽度的字体ANSI_VAR_FONTANSI标准的可变宽度的字体标准的可变宽度的字体DEFAULT_GUI_FONT当前当前GUI的默认字体的默认字体OEM_FIXED_FONT由标准原设备制造商由标准原设备制造商(OEM)提供提供DEVICE_DEFAULT_FONT当前图形设备的字体当前图形设备的字体SYSTEM_FIXED_FONTWindows的标准固定宽度的字体的标准固定宽度的字体SYSTEM_FONTWindows提供的可变宽度的字体提供的可变宽度的字体3

4、.1 文本设备环境文本设备环境-系统字体系统字体选择系统字体的步骤:选择系统字体的步骤:(1) 定义字体句柄变量;定义字体句柄变量;(2) 调函数调函数GetStockObject获得系统字体句柄,获得系统字体句柄,它返回的是系统的默认字体;它返回的是系统的默认字体;(3) 调用函数调用函数SelectObject将字体选入设备环境。将字体选入设备环境。 第第3章章 文本与字体文本与字体 3.1 文本设备环境文本设备环境-系统字体系统字体程序举例:程序举例:HFONT hFont; / hFont为字体的句柄为字体的句柄hFont = (HFONT)GetStockObject( SYSTEM

5、_FIXED_FONT);SelectObject(hdc,hFont); 第第3章章 文本与字体文本与字体 3.1 文本设备环境文本设备环境2、创建自定义字体、创建自定义字体可以调用函数可以调用函数CreateFont创建自定义字体。创建自定义字体。HFONT CreateFont( int nHeight, / 字体高度字体高度 int nWidth, / 字体宽度字体宽度 int nEscapement, / 行相对于页底的角度行相对于页底的角度 int nOrientation, / 字相对于页底的角度字相对于页底的角度 。第第3章章 文本与字体文本与字体 3.1 文本设备环境文本设备

6、环境-创建自定义字体创建自定义字体 。 int fnWeight, / 字体粗细度,范围为字体粗细度,范围为01000 DWORD fdwItalic, / 字体倾斜,则取非零字体倾斜,则取非零 DWORD fdwUnderline, / 下划线,则取非零下划线,则取非零 DWORD fdwStrikeOut, / 中划线,则取非零中划线,则取非零 DWORD fdwCharSet, / 字体所属字符集字体所属字符集 。 第第3章章 文本与字体文本与字体 3.1 文本设备环境文本设备环境-创建自定义字体创建自定义字体 参数参数fnWeight可选的一些值如下所示:可选的一些值如下所示: FW_

7、NORMAL 400 FW_BOLD 700 FW_HEAVY 900 参数参数fdwCharSet定义的字符集有很多定义的字符集有很多种,常用的有种,常用的有: ANSI_CHARSET、GB2312_CHARSET。 第第3章章 文本与字体文本与字体 3.1 文本设备环境文本设备环境-创建自定义字体创建自定义字体。DWORD fdwOutputPrecision, / 输出精度输出精度DWORD fdwClipPrecision, / 剪裁精度剪裁精度DWORD fdwQuality, / 输出质量输出质量DWORD fdwPitchAndFamily,/字体间距及系列字体间距及系列LPC

8、TSTR lpszFace / 字体名字体名);第第3章章 文本与字体文本与字体 3.1 文本设备环境文本设备环境-创建自定义字体创建自定义字体HFONT hFont; hFont = CreateFont(20,0,0,0, FW_NORMAL, 0,0,0, GB2312_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,DEFAULT_PITCH, “仿宋仿宋_GB2312”);SelectObject(hdc,hFont);第第3章章 文本与字体文本与字体 3.1 文本设备环境文本设备环境-字体颜色字体颜

9、色设置字体颜色设置字体颜色COLORREF SetTextColor( HDC hdc, COLORREF crColor / 字体颜色字体颜色);程序举例:程序举例:SetTextColor(hdc, RGB(255,0,0);第第3章章 文本与字体文本与字体 3.1 文本设备环境文本设备环境-背景颜色背景颜色设置背景颜色设置背景颜色COLORREF SetBkColor( HDC hdc, COLORREF crColor / 背景颜色值背景颜色值);程序举例:程序举例:SetBkColor(hdc, RGB(255,255,255);第第3章章 文本与字体文本与字体 3.2 文本的输出过

10、程文本的输出过程(1)获取字体信息;)获取字体信息;(2)格式化文本:)格式化文本: 确定后续文本坐标;确定后续文本坐标; 确定换行时文本坐标;确定换行时文本坐标;(3)调用函数输出文本。)调用函数输出文本。 第第3章章 文本与字体文本与字体 3.2 文本的输出过程文本的输出过程-获取字体信息获取字体信息 输出文本之前要获取字体的信息,如输出文本之前要获取字体的信息,如字符高度等,以确定输出格式和下一行字字符高度等,以确定输出格式和下一行字符的位置,可以调用下面的符的位置,可以调用下面的GetTextMetrics函数获取当前使用字体信息。函数获取当前使用字体信息。第第3章章 文本与字体文本与

11、字体 3.2 文本的输出过程文本的输出过程-获取字体信息获取字体信息BOOL GetTextMetrics( HDC hdc, LPTEXTMETRIC lptm); 调用该函数时,系统将当前字体信息拷贝到调用该函数时,系统将当前字体信息拷贝到tm标识的标识的TEXTMETRICS结构中。结构中。第第3章章 文本与字体文本与字体 3.2 文本的输出过程文本的输出过程-获取字体信息获取字体信息typedef struct tagTEXTMETRIC LONG tmHeight; / 字符高度字符高度 LONG tmAscent; / 字符基线以上高度字符基线以上高度LONG tmDescent;

12、 / 字符基线以下高度字符基线以下高度LONG tmInternalLeading;LONG tmExternalLeading;/ 行间距行间距 。 第第3章章 文本与字体文本与字体 3.2 文本的输出过程文本的输出过程-获取字体信息获取字体信息 。 LONG tmAveCharWidth;/ 平均字符宽度平均字符宽度 LONG tmMaxCharWidth;/ 最大字符宽度最大字符宽度 LONG tmWeight; / 字符的粗细度字符的粗细度 LONG tmOverhang;/ 合成字体间附加宽度合成字体间附加宽度 LONG tmDigitizedAspectX; LONG tmDigi

13、tizedAspectY;第第3章章 文本与字体文本与字体 3.2 文本的输出过程文本的输出过程-获取字体信息获取字体信息。BCHAR tmFirstChar;/ 字体中第一个字符值字体中第一个字符值BCHAR tmLastChar; / 字体中最后一个字符值字体中最后一个字符值BCHAR tmDefaultChar;/ 代替字体不支持字符代替字体不支持字符BCHAR tmBreakChar;/ 作为分隔符的字符作为分隔符的字符BYTE tmItalic; / 非非0则表示字体为斜体则表示字体为斜体。 第第3章章 文本与字体文本与字体 3.2 文本的输出过程文本的输出过程-获取字体信息获取字体

14、信息。BYTE tmUnderlined;/非非0则表示字体有下划线则表示字体有下划线BYTE tmStruckOut; /非非0则表示字符为中划线则表示字符为中划线BYTE tmPitchAndFamily; /字体间距和字体族字体间距和字体族BYTE tmCharSet; / 字符集字符集TEXTMETRIC; 第第3章章 文本与字体文本与字体 3.2 文本的输出过程文本的输出过程-获取字体信息获取字体信息程序举例:程序举例: TEXTMETRIC tm; GetTextMetrics(hdc, &tm);第第3章章 文本与字体文本与字体 3.2 文本的输出过程文本的输出过程-格式化文本(

15、续行)格式化文本(续行) 确定后续文本坐标确定后续文本坐标 确定后续文本的坐标确定后续文本的坐标,应先获取当前的应先获取当前的字符串的宽度字符串的宽度, 该工作由该工作由GetTextExtentPoint32函数完成,并把它存函数完成,并把它存储于一个储于一个SIZE结构中。结构中。第第3章章 文本与字体文本与字体 3.2 文本的输出过程文本的输出过程-格式化文本(续行)格式化文本(续行)BOOL GetTextExtentPoint32( HDC hdc, LPCTSTR lpszString, / 指定的字符串指定的字符串 int nLength, / 字符串中的字符数字符串中的字符数

16、LPSIZE lpSize);第第3章章 文本与字体文本与字体 3.2 文本的输出过程文本的输出过程-格式化文本(续行)格式化文本(续行)程序举例:程序举例:int cx0; / X轴起始坐标为轴起始坐标为cx0int cx1; / 后续文本起始坐标后续文本起始坐标cx1SIZE sz;GetTextExtentPoint32(hdc,Hello,strlen(Hello),&sz);cx1 = cx0 + sz.cx;第第3章章 文本与字体文本与字体 3.2 文本的输出过程文本的输出过程-格式化文本(换行)格式化文本(换行) 字符的高度与行间隔均存储在字符的高度与行间隔均存储在tm指向指向的

17、的TEXTMETRICS结构体中,通过计算当结构体中,通过计算当前行文本字符的高度与行间隔之和,即可前行文本字符的高度与行间隔之和,即可得到换行时文本的起始坐标。得到换行时文本的起始坐标。 第第3章章 文本与字体文本与字体 3.2 文本的输出过程文本的输出过程-格式化文本(换行)格式化文本(换行)程序举例:程序举例:int nLineHeight;TEXTMETRIC tm;GetTextMetrics(hdc, &tm);nLineHeight = tm.tmHeight + tm.tmExternalLeading;第第3章章 文本与字体文本与字体 3.2 文本的输出过程文本的输出过程-文本输出文本输出常用的文本输出函数常用的文本输出函数TextOut原型如下:原型如下:BOOL TextOut( HDC hdc, int X, int Y,/ 用户区中字符串的起始坐标用户区中字符串的起始坐标 LPCTSTR lpString, / 显示的字符串显示的字符串 int nCount /

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论