第五章文本与字体_第1页
第五章文本与字体_第2页
第五章文本与字体_第3页
第五章文本与字体_第4页
第五章文本与字体_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、第五章第五章 文本与字体文本与字体WindowsWindows经常使用经常使用GDIGDI进行文本输出。在进行文本输出。在WindowsWindows中,图形和文本没有明显的界限,中,图形和文本没有明显的界限,很多时候,很多时候,WindowsWindows把文本也当作图形对待。把文本也当作图形对待。使用定义好的与设备无关的字体集,使用定义好的与设备无关的字体集,WindowsWindows就能维护它的设备无关性,提供就能维护它的设备无关性,提供“所见即所得所见即所得”的好处,这意味着屏幕上的好处,这意味着屏幕上显示的文本与用打印机或绘图仪等输出设显示的文本与用打印机或绘图仪等输出设备输出的文

2、本是完全一样的。备输出的文本是完全一样的。在在WindowsWindows编程中,文本操作首先要获得文编程中,文本操作首先要获得文本句柄,此外,应用程序还要设置字体、本句柄,此外,应用程序还要设置字体、字符大小、字体颜色等有关属性,并将这字符大小、字体颜色等有关属性,并将这一些属性选入设备环境。一些属性选入设备环境。文本文本操作操作先要获得文本句柄先要获得文本句柄设置字体、字符大小、字符颜色等有关属性设置字体、字符大小、字符颜色等有关属性将这些属性选入设备环境将这些属性选入设备环境主要内容主要内容5.1 5.1 设置文本的设备环境设置文本的设备环境5.25.2文本的输出过程文本的输出过程5.3

3、5.3应用程序举例应用程序举例5.1 5.1 设置文本的设备环境设置文本的设备环境字体描述了所要显示的文本的大小,类型字体描述了所要显示的文本的大小,类型和外形,也就是说,字体包含字符集中每和外形,也就是说,字体包含字符集中每个字符的一个特殊描述。个字符的一个特殊描述。字体字体逻辑字体逻辑字体定义的字符集是定义的字符集是设备无关设备无关的,它可以精确标度,的,它可以精确标度,因此得到广泛应用因此得到广泛应用物理字体物理字体是为特殊设备设计的,因而是是为特殊设备设计的,因而是设备相关设备相关的的5.1 5.1 设置文本的设备环境设置文本的设备环境字体字体句柄句柄Windows Windows 系

4、统提供系统提供了七了七种基本字体,如下表所示:种基本字体,如下表所示:字体字体 说明说明ANSI_FIXED ANSI_FIXED ANSIANSI标准的固定宽度的字体标准的固定宽度的字体ANSI_VARANSI_VAR ANSIANSI标准的可变宽度的字体标准的可变宽度的字体DEFAULT_GUIDEFAULT_GUI 当前当前GUIGUI的缺省字体的缺省字体OEM_FIXED OEM_FIXED 由由标准原设备制造商标准原设备制造商(OEM)(OEM)提供提供DEVICE_DEFAULTDEVICE_DEFAULT 当前当前图形设备的字体图形设备的字体SYSTEM_FIXEDSYSTEM_

5、FIXED Windows Windows的标准固定宽度的字体的标准固定宽度的字体SYSTEM SYSTEM WindowsWindows提供的可变宽度的字体提供的可变宽度的字体WindowsWindows用用SYSTEMSYSTEM作为系统作为系统界面界面字体字体。5.1 5.1 设置文本的设备环境设置文本的设备环境字体字体句柄句柄(1) (1) 定义字体句柄变量:定义字体句柄变量: HFONT HFONT hF; /hFhF; /hF为字体的句柄为字体的句柄(2) (2) 调函数调函数GetStockObjectGetStockObject获得系统字体获得系统字体句柄,句柄, 它返回的是系

6、统的缺省字体它返回的是系统的缺省字体 hF hF= GetStockObject( )= GetStockObject( ):(3) (3) 调用函数调用函数SelectObjectSelectObject将字体选入设备将字体选入设备环境环境 SelectObject(hdc,hF)SelectObject(hdc,hF);选选择择系系统统字字体体的的步步骤骤 若需要定义系统以外的字体,可以调用函数若需要定义系统以外的字体,可以调用函数GreateFont自行自行创建创建 HFont=CreateFontHFont=CreateFont ( (int nHeight, int nHeight,

7、 /字体高度,字体高度,0 0采用系统缺省值,使用逻辑单位采用系统缺省值,使用逻辑单位 int nWidth,int nWidth, /字体宽度,取字体宽度,取0 0则由系统根据高宽比取最佳值则由系统根据高宽比取最佳值 int nEscapement, int nEscapement, /每行文字相对于页底的角度,每行文字相对于页底的角度,单位为单位为0.10.1度度 int nOrienation, int nOrienation, /每个文字相对于页底的角度,每个文字相对于页底的角度,单位为单位为0.10.1度度 DWORD nWeight, DWORD nWeight, /字体粗细度,范

8、围为字体粗细度,范围为0 010001000 DWORD Dwltalic, DWORD Dwltalic, /如果要求字体倾斜,则取非零如果要求字体倾斜,则取非零 DWORD dwUnderline,DWORD dwUnderline,/如果要求下划线,则取非零如果要求下划线,则取非零 DWORD dwStrikeout,DWORD dwStrikeout,/如果要求中划线,则取非零如果要求中划线,则取非零 DWORD dwCharset, DWORD dwCharset, /字体所属字符集字体所属字符集 DWORD dwOutputPrecision,/DWORD dwOutputPrec

9、ision,/输出精度,一般取缺省值输出精度,一般取缺省值OUT_DEFAULT_PRECISOUT_DEFAULT_PRECIS DWORD dwClipPrecision, / DWORD dwClipPrecision, /剪裁精度,常取缺省值剪裁精度,常取缺省值CLIP_DEFAULT_PRECISCLIP_DEFAULT_PRECIS DWORD dwQuality, DWORD dwQuality, /输出质量,一般取缺省值输出质量,一般取缺省值DEFAULT_QUALITYDEFAULT_QUALITY DWORD dwPitchAndFamily, / DWORD dwPitc

10、hAndFamily, /字体名字体名) ) 创建自定义字体创建自定义字体5.1 5.1 设置文本的设备环境设置文本的设备环境设置字体和背景颜色设置字体和背景颜色设置字体颜色:设置字体颜色:SetTextColor(hdc,crColor)SetTextColor(hdc,crColor);设置背景颜色设置背景颜色:SetBkColor(hdc,crColor)SetBkColor(hdc,crColor);其中,其中,crColorcrColor为设置的颜色为设置的颜色5.2 5.2 文本的输出过程文本的输出过程确定后续文本坐标确定后续文本坐标确定换行时文本坐标确定换行时文本坐标文本输文本输

11、出过程出过程获取字体信息获取字体信息格式化文本格式化文本调用函数输出文本调用函数输出文本5.2 5.2 文本的输出过程文本的输出过程获取字体信息获取字体信息输出文本之前要获取字体的信息,如字符高度等,以确定输出文本之前要获取字体的信息,如字符高度等,以确定输出格式和下一行字符的位置输出格式和下一行字符的位置。WindowsWindows程序中通过调用程序中通过调用GetTextMetricsGetTextMetrics获取当前使用字体信息。获取当前使用字体信息。调用该函数时,系统将当前字体的信息拷贝到调用该函数时,系统将当前字体的信息拷贝到tmtm标识的标识的TEXTMETRICSTEXTME

12、TRICS结构中结构中 GetTextMetrics (hdc,&tm) GetTextMetrics (hdc,&tm);/tmtm为为TEXTMETRICSTEXTMETRICS结构结构TEXTMETRICSTEXTMETRICS结构定义:结构定义:typedef typedef struct tagTEXTMETRIC struct tagTEXTMETRIC /tm/tmLONG tmHeight; LONG tmHeight; /字符高度字符高度LONG tmAscent;LONG tmAscent; /字符基线以上高度字符基线以上高度LONG tmDescent;

13、LONG tmDescent; /字符基线以下高度字符基线以下高度LONG tmInternalLeading;LONG tmInternalLeading;/tmHeight/tmHeight制订的字符高度顶部的控件制订的字符高度顶部的控件LONG tmExternalLeading;LONG tmExternalLeading;/行与行之间的间隔行与行之间的间隔LONG tmAveCharWidth;LONG tmAveCharWidth;/平均字符宽度平均字符宽度LONG tmMaxCharWidth;LONG tmMaxCharWidth;/最大字符宽度最大字符宽度LONG tmWei

14、ght; LONG tmWeight; /字符的粗细度字符的粗细度LONG tmOverhang;LONG tmOverhang;/合成字体间附加的宽度合成字体间附加的宽度LONG tmDigitizedAspectX; LONG tmDigitizedAspectX; /为输出设备设计的为输出设备设计的X X轴尺寸轴尺寸LONG tmDigitizedAspectY; LONG tmDigitizedAspectY; /为输出设备设计的为输出设备设计的Y Y轴尺寸轴尺寸BCHAR tmFirstChar;BCHAR tmFirstChar;/字体中第一个字符值字体中第一个字符值BCHAR t

15、mLastChar; BCHAR tmLastChar; /字体中最后一个字符值字体中最后一个字符值BCHAR tmDefaultChar; BCHAR tmDefaultChar; /代替不在字体中字符的字符代替不在字体中字符的字符BCHAR tmBreakChar;BCHAR tmBreakChar;/作为分割符的字符作为分割符的字符BYTE tmItalic; BYTE tmItalic; /非非0 0则表示字体为斜体则表示字体为斜体BYTE tmUnderlined; BYTE tmUnderlined; /非非0 0则表示字体有下划线则表示字体有下划线BYTE tmStruckOut

16、; BYTE tmStruckOut; /非非0 0则表示字符为删除字体则表示字符为删除字体BYTE tmPitchAndFamily; BYTE tmPitchAndFamily; /字体间距和字体族字体间距和字体族BYTE tmCharSet; BYTE tmCharSet; /字符集字符集TEXTMETRICTEXTMETRICTEXTMETRICSTEXTMETRICS结构定义:结构定义:5.2 5.2 文本的输出过程文本的输出过程格式化文本格式化文本格式化处理针对两种情况:一是在文本行中确定后续文本格式化处理针对两种情况:一是在文本行中确定后续文本的坐标,二是在换行时确定下一行文本的

17、坐标。的坐标,二是在换行时确定下一行文本的坐标。u一确定后续文本坐标一确定后续文本坐标确定后续文本的坐标确定后续文本的坐标, ,应先获取当前的字符串的宽度应先获取当前的字符串的宽度, , 该该工作由工作由GetTextExtentPoint32GetTextExtentPoint32函数函数完成,并把它存储于一完成,并把它存储于一个个SIZESIZE结构结构中。中。BOOL GetTextExtentPoint32BOOL GetTextExtentPoint32( ( HDC hdc, HDC hdc, LPCTSTR lpszString,/ LPCTSTR lpszString,/指定的

18、字符串指定的字符串 int nLength, int nLength, /字符串中的字符数字符串中的字符数 LPSIZE lpSizeLPSIZE lpSize/返回字符串宽度及高度的返回字符串宽度及高度的SIZESIZE数据结构数据结构的地址的地址) )5.2 5.2 文本的输出过程文本的输出过程格式化文本格式化文本格式化处理针对两种情况:一是在文本行中确定后续文本格式化处理针对两种情况:一是在文本行中确定后续文本的坐标,二是在换行时确定下一行文本的坐标。的坐标,二是在换行时确定下一行文本的坐标。u一确定后续文本坐标一确定后续文本坐标确定后续文本的坐标确定后续文本的坐标, ,应先获取当前的字

19、符串的宽度应先获取当前的字符串的宽度, , 该该工作由工作由GetTextExtentPoint32GetTextExtentPoint32函数函数完成,并把它存储于一完成,并把它存储于一个个SIZESIZE结构结构中。中。SIZE数据结构的定义数据结构的定义typedef struct tagSIZE LONG cx; LONG cy; SIZE;5.2 5.2 文本的输出过程文本的输出过程格式化文本格式化文本格式化处理针对两种情况:一是在文本行中确定后续文本格式化处理针对两种情况:一是在文本行中确定后续文本的坐标,二是在换行时确定下一行文本的坐标。的坐标,二是在换行时确定下一行文本的坐标。

20、u一确定后续文本坐标一确定后续文本坐标确定后续文本的坐标确定后续文本的坐标, ,应先获取当前的字符串的宽度应先获取当前的字符串的宽度, , 该该工作由工作由GetTextExtentPoint32GetTextExtentPoint32函数函数完成,并把它存储于一完成,并把它存储于一个个SIZESIZE结构结构中。中。例如,例如,X X轴起始坐标为轴起始坐标为cx0cx0,后续文本起始坐标,后续文本起始坐标cx1cx1为:为: cx1=cx0+size.cx cx1=cx0+size.cx; ;5.2 5.2 文本的输出过程文本的输出过程格式化文本格式化文本格式化处理针对两种情况:一是在文本行

21、中确定后续文本格式化处理针对两种情况:一是在文本行中确定后续文本的坐标,二是在换行时确定下一行文本的坐标。的坐标,二是在换行时确定下一行文本的坐标。u二确定换行时文本坐标二确定换行时文本坐标字符的高度与行间隔均存储在字符的高度与行间隔均存储在tmtm指向的指向的TEXTMETRICSTEXTMETRICS结结构中,换行时构中,换行时Y Y轴上文本的起始坐标轴上文本的起始坐标cycy为为: cy=tm.tmHeight+tm.tmExternalLeadingcy=tm.tmHeight+tm.tmExternalLeading; ;通过通过计算当前行文本字符的高度与行间隔之和,即可得计算当前行文本字符的高度与行间隔之和,即可得到换行时文本的起始坐标到换行时文本的起始坐标5.2 5.2 文本的输出过程文本的输出过程文本输出文本输出常用常用的文本输出函数的文本输出函数TextOutTextOut原型如下:原型如下:BOOL TextOutBOOL TextOut( ( HDC hdc, HDC hdc, int X, int Y int X, int Y, /, /X, YX, Y为用户区中字符串的起始坐标为用户区中字符串的起始坐标 LPCTSTR lpstring, /lpstri

温馨提示

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

评论

0/150

提交评论