《文本与字体》PPT课件.ppt_第1页
《文本与字体》PPT课件.ppt_第2页
《文本与字体》PPT课件.ppt_第3页
《文本与字体》PPT课件.ppt_第4页
《文本与字体》PPT课件.ppt_第5页
已阅读5页,还剩32页未读 继续免费阅读

VIP免费下载

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

文档简介

1 第5讲文本与字体 使用定义好的与设备无关的字体集 Windows就能维护它的设备无关性 提供 所见即所得 的好处 即屏幕所见与设备输出的文本是一样的 2 5 1设置文本的设备环境 Win系统提供了七种基本字体 3 1 定义字体句柄变量 HFONThF hF为字体的句柄 2 调函数GetStockObject获得系统字体句柄它返回的是系统的缺省字体hF GetStockObject 3 调用函数SelectObject将字体选入设备环境SelectObject hdc hF 选择系统字体的步骤 4 5 1 2创建自定义字体 若需要定义系统以外的字体 可以调用函数GreateFont自行创建HFont CreateFont intnHeight 字体高度 0采用系统缺省值 使用逻辑单位intnWidth 字体宽度 取0则由系统根据高宽比取最佳值intnEscapement 每行文字相对于页底的角度 单位为0 1度intnOrienation 每个文字相对于页底的角度 单位为0 1度DWORDnWeight 字体粗细度 范围为0 1000DWORDDwltalic 如果要求字体倾斜 则取非零DWORDdwUnderline 如果要求下划线 则取非零DWORDdwStrikeout 如果要求中划线 则取非零DWORDdwCharset 字体所属字符集DWORDdwOutputPrecision 输出精度 一般取缺省值OUT DEFAULT PRECISDWORDdwClipPrecision 剪裁精度 常取缺省值CLIP DEFAULT PRECISDWORDdwQuality 输出质量 一般取缺省值DEFAULT QUALITYDWORDdwPitchAndFamily 字体名 可选的系统字符集 ANSI CHARSETOEM CHARSETSYMBOL CHARSETDEFAULT CHARSETSHIFTJIS CHARSET 5 5 1 3设置字体和背景颜色 crColor为设置的颜色 字体及背景颜色的设置在开发过程中非常重要 6 5 2文本的输出过程 7 获取字体信息 8 系统定义的TEXTMETRICS的结构如下 typedefstructtagTEXTMETRIC tmLONGtmHeight 字符高度LONGtmAscent 字符基线以上高度LONGtmDescent 字符基线以下高度LONGtmInternalLeading tmHeight制订的字符高度顶部的控件LONGtmExternalLeading 行与行之间的间隔LONGtmAveCharWidth 平均字符宽度LONGtmMaxCharWidth 最大字符宽度LONGtmWeight 字符的粗细度LONGtmOverhang 合成字体间附加的宽度LONGtmDigitizedAspectX 为输出设备设计的X轴尺寸LONGtmDigitizedAspectY 为输出设备设计的Y轴尺寸BCHARtmFirstChar 字体中第一个字符值BCHARtmLastChar 字体中最后一个字符值BCHARtmDefaultChar 代替不在字体中字符的字符BCHARtmBreakChar 作为分割符的字符BYTEtmItalic 非0则表示字体为斜体BYTEtmUnderlined 非0则表示字体有下划线BYTEtmStruckOut 非0则表示字符为删除字体BYTEtmPitchAndFamily 字体间距和字体族BYTEtmCharSet 字符集 TEXTMETRIC Return 9 格式化文本 1 确定后续文本坐标 例如 X轴起始坐标为cx0 后续文本起始坐标cx1为 cx1 cx0 size cx Return 10 2 确定换行时文本坐标 字符的高度与行间隔均存储在tm指向的TEXTMETRICS结构中 换行时Y轴上文本的起始坐标cy为 cy tm tmHeight tm tmExternalLeading Return 通过计算当前行文本字符的高度与行间隔之和 即可得到换行时文本的起始坐标 11 文本输出 常用的文本输出函数TextOut原型如下 BOOLTextOut HDChdc intX intY X Y为用户区中字符串的起始坐标LPCTSTRlpstring lpstring为显示的字符串intnCount nCount为字符串中的字节数 TextOut以坐标X Y为起点 输出字节数为nCount 名为lpstring中的字符串 12 5 3文本操作实例 例5 1 在用户窗口上输出几行字符串 当窗口接收到WM PAINT消息后 显示的文本每次都被重新刷新 include include includelongWINAPIWndProc HWNDhWnd UINTiMessage UINTwParam LONGlParam BOOLInitWindowsClass HINSTANCEhInstance BOOLInitWindows HINSTANCEhInstance intnCmdShow 13 主函数intWINAPIWinMain HINSTANCEhInstance HINSTANCEhPrevInstance LPSTRlpCmdLine intnCmdShow MSGMessage if InitWindowsClass hInstance returnFALSE if InitWindows hInstance nCmdShow returnFALSE while GetMessage 14 消息处理函数longWINAPIWndProc HWNDhWnd UINTiMessage UINTwParam LONGlParam staticlongnXChar nYChar HDChDC 定义指向设备上下文的句柄shortx TEXTMETRICtm shortLnCount 6 PAINTSTRUCTPtStr 定义指向包含绘图信息的结构体变量staticchar textbuf ThisistheFirstline Thisisthesecondline Thisisthethirdline Thisisthefourthline Thisisthefifthline Thisisthesixthline 输出的文本内容 15 switch iMessage 处理消息 caseWM CREATE 处理窗口创建消息hDC GetDC hWnd 获取当前设备表句柄GetTextMetrics hDC 16 BOOLInitWindowsClass HINSTANCEhInstance 初始化窗口类 WNDCLASSWndClass WndClass style CS HREDRAW CS VREDRAW returnRegisterClass BOOLInitWindows HINSTANCEhInstance intnCmdShow 初始化窗口 HWNDhWnd hWnd CreateWindow WinText 生成窗口 文本显示示例程序 WS OVERLAPPEDWINDOW NULL if hWnd returnFALSE ShowWindow hWnd nCmdShow 显示窗口UpdateWindow hWnd returnTRUE 17 例5 2 本程序通过在窗口中分五行分别显示五行文本 以说明在窗口的用户区中输出文本的方法 18 本例题的源代码如下 include include include includeLRESULTCALLBACKWndProc HWND UINT WPARAM LPARAM intWINAPIWinMain HINSTANCEhInstance HINSTANCEhPrevInst LPSTRlpszCmdLine intnCmdShow HWNDhwnd MSGMsg WNDCLASSwndclass charlpszClassName 文本输出 charlpszTitle EXAMPLEFORTHETEXTOUTPUT wndclass style 0 wndclass lpszClassName lpszClassName 19 if RegisterClass 20 LRESULTCALLBACKWndProc HWNDhwnd UINTmessage WPARAMwParam LPARAMlParam HDChdc HFONThF black hF big 定义两种字体句柄PAINTSTRUCTps TEXTMETRICtm 定义一个TEXTMETRIC结构 用以记录字体信息charlpsz 1 这是一行红色的 字体为SYSTEM FONT的文字 红色代表未来 charlpsz 2 现在显示的是自定义字体 颜色为绿色 绿色代表生机勃勃 charlpsz 3 现在展现在您面前的是蓝色的粗体字 蓝色代表广阔的海洋和天空 charlpsz 4 当前字体为大号 斜体并带有下划线的文字 charlpsz 5 现在您掌握了字体的操作了吗 charlpsz 6 祝您成功 intX 0 Y 0 SIZEsize 定义一个SIZE类型的结构 21 switch message caseWM PAINT hdc BeginPaint hwnd 字体名称 22 SetTextColor hdc RGB 0 255 0 设置文本颜色为绿色SelectObject hdc hF black 将自定义字体选入设备环境GetTextMetrics hdc 23 hF big CreateFont 引入新字体 30 字体高度0 0 0 FW NORMAL 1 定义斜体1 定义输出时带下划线0 ANSI CHARSET 所使用的字符集OUT DEFAULT PRECIS CLIP DEFAULT PRECIS DEFAULT QUALITY DEFAULT PITCH FF DONTCARE 大号字 24 SelectObject hdc hF big 将自定义字体选入设备环境SetTextColor hdc RGB 155 155 155 设置文本颜色Y Y tm tmHeight 20 tm tmExternalLeading TextOut hdc X Y lpsz 4 strlen lpsz 4 输出文本SetTextColor hdc RGB 255 0 0 设置文本颜色为红色Y Y tm tmHeight 30 tm tmExternalLeading TextOut hdc X Y lpsz 5 strlen lpsz 5 输出文本 在该行继续输出文本GetTextExtentPoint32 hdc lpsz 5 strlen lpsz 5 25 caseWM DESTROY DeleteObject hF black 退出窗口时删除自定义字体DeleteObject hF big PostQuitMessage 0 break default returnDefWindowProc hwnd message wParam lParam return0 26 5 3 在窗口中显示出26个英文字母 从左向右字母依次位置提高10个象素单位 并且颜色变为红色 然后回到正常位置 当到达最右端后改变方向从右向左依次变成红色并位置提高10个象素单位 在窗口的第二行显示26个字母 字体从正常到斜体 颜色从黑色到天蓝色不断变换 如图所示 用nChar标志红色跳起字母在26个字母的位置 27 本例题要解决动态显示问题 首先处理第一行字符 在WM PAINT消息处理程序中 在得到了设备环境句柄hDC后 调用用户自定义的函数CreateFont hDC nHeight bItalic 第一个参数hDC是设备环境句柄 第2个参数nHeight是字体高度 第3个参数bItalic是斜字体的标志变量 28 下面这段程序按照黑色的字体输出从字符串开头到当前位置的字符串 Y tm tmExternalLeading 10 设置输出字符的Y坐标for i 0 i nChar i SetTextColor hDC RGB 0 0 0 设置字体的颜色为黑色X X tm tmAveCharWidth 2 设置输出字符的X坐标TextOut hDC X Y 输出从第0个到第nChar 1个字符 下面输出当前位置上的字符 当前位置的字符位置提高10个象素单位 字体颜色为红色 SetTextColor hDC RGB 255 0 0 设置字体的颜色为红色X X tm tmAveCharWidth 2 设置输出字符的X Y坐标Y tm tmExternalLeading 提高10个像素hF CreateFont hDC 40 0 创建字体SelectObject hDC hF 选入字体TextOut hDC X Y 输出后面的字符 29 下面设置bRight和bLeft的值 if nChar nCharlen 当输出到最后的一个字符时 bRight FALSE 改变红色字移动的方向为向左bLeft TRUE else nChar 0 当输出到第一个字时 bRight TRUE 改变红色字移动的方向为向右bLeft FALSE if bRight TRUE nChar elsenChar 如果nChar 等于字符串长度 已到了字符串末尾 将bRight置为True字符长度 0时 已到了最左端 将bLeft置为True 当bRight True时字符位置标志nChar加1 当bLeft True时 字符位置标志变量减1 30 下面输出第2行字符 在WM PAINT处理程序中 加入下列代码 hF CreateFont hDC 40 bItalic 创建字体 大小为40SelectObject hDC hF 选入字体X tm tmAveCharWidth 2 设置输出位置Y tm tmHeight 2 if bItalic TRUE SetTextColor hDC RGB 0 0 0 elseSetTextColor hDC RGB 0 255 255 TextOut hDC X Y lpsz 1 strlen lpsz 1 输出if bItalic TRUE bItalic FALSE elsebItalic TRUE 调用用户自定义函数CreateFont 创建斜体字 确定输出位置根据bItalic的状态设置字体的颜色 当bItalic为真时 输出斜体天蓝色字符 为假时 输出正常黑色字体最后对bItalic取反 在下一次显示与此次不同的另一种效果 31 例5 4 将一首四句的古诗从右到左竖排输出 要求窗口每次接收到WM PAINT消息时都刷新显示的文本 32 include include includelongWINAPIWndProc HWNDhWnd UINTiMessage UINTwParam LONGlParam BOOLInitWindowsClass HINSTANCEhInstance BOOLInitWindows HINSTANCEhInstance intnCmdShow 主函数intWINAPIWinMain HINSTANCEhInstance HINSTANCEhPrevInstance LPSTRlpCmdLine intnCmdShow MSGMessage if InitWindowsClass hInstance returnFALSE if InitWindows hInstance nCmdShow returnFALSE while GetMessage 33 longWINAPIWndProc HWNDhWnd UINTiMessage UINTwParam LONGlParam 1 staticlongnXChar nCaps nYChar 2 intpointx pointy

温馨提示

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

评论

0/150

提交评论