【教学课件】第5章文本与字体.ppt
《【教学课件】第5章文本与字体.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第5章文本与字体.ppt(37页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第5 5章章 文本与字体文本与字体1 使用定义好的与设备无关的使用定义好的与设备无关的字体字体集,集,Windows就能维就能维护它的设备无关性,提供护它的设备无关性,提供“所见即所得所见即所得”的好处,即屏幕的好处,即屏幕所见与设备输出的文本是一样的。所见与设备输出的文本是一样的。Windows经常使用经常使用GDI进行文本输出。在进行文本输出。在一定意义上,任何内容一定意义上,任何内容都可以看成都可以看成图形实体图形实体文本文本操作操作先要获得文本句柄先要获得文本句柄设置字体、字符大小、字符颜色等有关属性设置字体、字符大小、字符颜色等有关属性将这些属性选入设备环境将这些属性选入设备环境2
2、字体字体逻辑字体逻辑字体定义的字符集是定义的字符集是设备无关设备无关的,它可以精确标度,因的,它可以精确标度,因此得到广泛应用此得到广泛应用描述所要显示描述所要显示的文本的大小、的文本的大小、类型和外形类型和外形物理字体物理字体是为特殊设备设计的,因而是是为特殊设备设计的,因而是设备相关设备相关的的Win Win 系统系统系统系统提供了七种提供了七种提供了七种提供了七种基本字体基本字体基本字体基本字体字体字体 说明说明ANSI_FIXED ANSI标准的标准的固定固定宽度的字体宽度的字体ANSI_VAR ANSI标准的标准的可变可变宽度的字体宽度的字体DEFAULT_GUI当前当前GUI的默认
3、字体的默认字体OEM_FIXED 由标准原设备制造商由标准原设备制造商(OEM)提供提供DEVICE_DEFAULT当前图形设备的字体当前图形设备的字体SYSTEM_FIXEDWindows的标准的标准固定固定宽度的字体宽度的字体SYSTEM Windows提供的提供的可变可变宽度的字体宽度的字体常作为默认字体常作为默认字体常作为默认字体常作为默认字体 WinWinWinWin用它作为用它作为用它作为用它作为系统界面字体系统界面字体系统界面字体系统界面字体5.1 设置文本的设备环境设置文本的设备环境 5.1.1 字体句柄字体句柄3(1)(1)定义字体句柄变量:定义字体句柄变量:HFONT hF
4、;/hF HFONT hF;/hF为字体的句柄为字体的句柄(2)(2)调函数调函数GetStockObjectGetStockObject获得系统字体句柄获得系统字体句柄 它返回的是系统的默认字体它返回的是系统的默认字体 hF=GetStockObject()hF=GetStockObject():(3)(3)调用函数调用函数SelectObjectSelectObject将字体选入设备环将字体选入设备环境境 SelectObject(hdc,hF)SelectObject(hdc,hF);选选择择系系统统字字体体的的步步骤骤4 若需要定义系统以外的字体,可以调用函数若需要定义系统以外的字体,
5、可以调用函数GreateFont自行创建自行创建 HFont=CreateFont HFont=CreateFont(int nHeight,int nHeight,/字体高度,字体高度,0 0采用系统默认值,使用逻辑单位采用系统默认值,使用逻辑单位 int nWidth,int nWidth,/字体宽度,取字体宽度,取0 0则由系统根据高宽比取最佳值则由系统根据高宽比取最佳值 int nEscapement,int nEscapement,/每每行行文字相对于页底的角度,文字相对于页底的角度,单位为单位为0.10.1度度 int nOrienation,int nOrienation,/每每
6、个个文字相对于页底的角度,文字相对于页底的角度,单位为单位为0.10.1度度 DWORD nWeight,DWORD nWeight,/字体粗细度,范围为字体粗细度,范围为0 010001000 DWORD Dwltalic,DWORD Dwltalic,/如果要求字体倾斜,则取非零如果要求字体倾斜,则取非零 DWORD dwUnderline,DWORD dwUnderline,/如果要求下划线,则取非零如果要求下划线,则取非零 DWORD dwStrikeout,DWORD dwStrikeout,/如果要求中划线,则取非零如果要求中划线,则取非零 DWORD dwCharset,DWOR
7、D dwCharset,/字体所属字符集字体所属字符集 DWORD dwOutputPrecision,/DWORD dwOutputPrecision,/输出精度,一般取默认值输出精度,一般取默认值OUT_DEFAULT_PRECISOUT_DEFAULT_PRECIS DWORD dwClipPrecision,/DWORD dwClipPrecision,/剪裁精度,常取默认值剪裁精度,常取默认值CLIP_DEFAULT_PRECISCLIP_DEFAULT_PRECIS DWORD dwQuality,DWORD dwQuality,/输出质量,一般取默认值输出质量,一般取默认值DEF
8、AULT_QUALITYDEFAULT_QUALITY DWORD dwPitchAndFamily,/DWORD dwPitchAndFamily,/字体名字体名)可选的系统字符集:可选的系统字符集:ANSI_CHARSETANSI_CHARSETOEM_CHARSETOEM_CHARSETSYMBOL_CHARSETSYMBOL_CHARSETDEFAULT_CHARSETDEFAULT_CHARSETSHIFTJIS_CHARSETSHIFTJIS_CHARSET5.1.2 创建自定义字体创建自定义字体5设置字体颜色:设置字体颜色:SetTextColor(hdc,crColor)Set
9、TextColor(hdc,crColor);设置背景颜色设置背景颜色:SetBkColor(hdc,crColor)SetBkColor(hdc,crColor);crColorcrColor为设置的颜色为设置的颜色字体字体字体字体及及背景颜色背景颜色背景颜色背景颜色的设置在开发过的设置在开发过的设置在开发过的设置在开发过程中非常重要程中非常重要程中非常重要程中非常重要5.1.3 设置字体和背景颜色设置字体和背景颜色6确定后续文本坐标确定后续文本坐标确定换行时文本坐标确定换行时文本坐标文本输文本输出过程出过程获取字体信息获取字体信息格式化文本格式化文本调用函数输出文本调用函数输出文本5.2
10、文本的输出过程文本的输出过程7获取字体信息获取字体信息输出文本之前要获取字体的信息,如字符高度输出文本之前要获取字体的信息,如字符高度等,以确定输出格式和下一行字符的位置等,以确定输出格式和下一行字符的位置 GetTextMetrics(hdc,&tm)GetTextMetrics(hdc,&tm);/tmtm为为TEXTMETRICSTEXTMETRICS结构结构获取当前使获取当前使用字体信息用字体信息调用该函数时,系统将当前调用该函数时,系统将当前字体的信息拷贝到字体的信息拷贝到tm标识标识的的TEXTMETRICSTEXTMETRICS结构中结构中8系统定义的系统定义的TEXTMETRI
11、CS的结构如下:的结构如下:typedef struct tagTEXTMETRIC typedef struct tagTEXTMETRIC /tm/tmLONG tmHeight;LONG tmHeight;/字符高度字符高度LONG tmAscent;LONG tmAscent;/字符基线以上高度字符基线以上高度LONG tmDescent;LONG tmDescent;/字符基线以下高度字符基线以下高度LONG tmInternalLeading;LONG tmInternalLeading;/tmHeight/tmHeight制订的字符高度顶部的控件制订的字符高度顶部的控件LONG
12、tmExternalLeading;LONG tmExternalLeading;/行与行之间的间隔行与行之间的间隔LONG tmAveCharWidth;LONG tmAveCharWidth;/平均字符宽度平均字符宽度LONG tmMaxCharWidth;LONG tmMaxCharWidth;/最大字符宽度最大字符宽度LONG tmWeight;LONG tmWeight;/字符的粗细度字符的粗细度LONG tmOverhang;LONG tmOverhang;/合成字体间附加的宽度合成字体间附加的宽度LONG tmDigitizedAspectX;LONG tmDigitizedAs
13、pectX;/为输出设备设计的为输出设备设计的X X轴尺寸轴尺寸LONG tmDigitizedAspectY;LONG tmDigitizedAspectY;/为输出设备设计的为输出设备设计的Y Y轴尺寸轴尺寸BCHAR tmFirstChar;BCHAR tmFirstChar;/字体中第一个字符值字体中第一个字符值BCHAR tmLastChar;BCHAR tmLastChar;/字体中最后一个字符值字体中最后一个字符值BCHAR tmDefaultChar;BCHAR tmDefaultChar;/代替不在字体中字符的字符代替不在字体中字符的字符BCHAR tmBreakChar;B
14、CHAR tmBreakChar;/作为分割符的字符作为分割符的字符BYTE tmItalic;BYTE tmItalic;/非非0 0则表示字体为斜体则表示字体为斜体BYTE tmUnderlined;BYTE tmUnderlined;/非非0 0则表示字体有下划线则表示字体有下划线BYTE tmStruckOut;BYTE tmStruckOut;/非非0 0则表示字符为删除字体则表示字符为删除字体BYTE tmPitchAndFamily;BYTE tmPitchAndFamily;/字体间距和字体族字体间距和字体族BYTE tmCharSet;BYTE tmCharSet;/字符集字
15、符集TEXTMETRICTEXTMETRIC9格式化文本格式化文本(1)确定后续文本坐标确定后续文本坐标换行时确定下一行文本的坐标换行时确定下一行文本的坐标需要格式化需要格式化处理的情况处理的情况在文本行中确定后续文本的坐标在文本行中确定后续文本的坐标确定后续文本的坐标确定后续文本的坐标,应先获取当前的字符串的宽度应先获取当前的字符串的宽度,该工作由该工作由GetTextExtentPoint32函数函数完成,并把它存储于一个完成,并把它存储于一个SIZE结构结构中。中。BooL GetTextExtentPoint32BooL GetTextExtentPoint32(HDC hdc,HDC
16、 hdc,LPCTSTR lpszStringLPCTSTR lpszString,/,/指定的字符串指定的字符串 int nLength,int nLength,/字符串中的字符数字符串中的字符数 LPSIZE lpSizeLPSIZE lpSize/返回字符串宽度及高度的返回字符串宽度及高度的SIZESIZE数据结构数据结构的地址的地址)SIZE数据结构数据结构的定义的定义typedef struct tagSIZE LONG cx;LONG cy;SIZE;例如,例如,X轴起始坐标为轴起始坐标为cx0,后续文本起始坐标,后续文本起始坐标cx1为:为:cx1=cx0+size.cx;10(
17、2)(2)确定换行时文本坐标确定换行时文本坐标字符的高度字符的高度与与行间隔行间隔均存储在均存储在tm指向的指向的TEXTMETRICS结结构中,换行时构中,换行时Y轴上文本的起始坐标轴上文本的起始坐标cy为:为:cy=tm.tmHeight+tm.tmExternalLeading;通过计算当前行文本通过计算当前行文本字符的高度字符的高度与与行间隔行间隔之和,即可之和,即可得到换行时文本的起始坐标得到换行时文本的起始坐标11文本输出文本输出 常用的文本输出函数常用的文本输出函数TextOut原型如下:原型如下:BOOL TextOutBOOL TextOut(HDC hdc,HDC hdc,
18、int X,int Y,int X,int Y,/X,Y /X,Y为用户区中字符串的起始坐标为用户区中字符串的起始坐标 LPCTSTR lpstring,/lpstringLPCTSTR lpstring,/lpstring为显示的字符串为显示的字符串 int nCountint nCount /nCount /nCount为字符串中的字节数为字符串中的字节数);TextOutTextOut 以坐标以坐标以坐标以坐标X,YX,Y为起点,为起点,为起点,为起点,输出字节数为输出字节数为输出字节数为输出字节数为 nCount nCount、名为名为名为名为lpstringlpstring中的字符串
19、中的字符串中的字符串中的字符串12【例【例5-1】在用户窗口上输出几行字符串,当窗口接收到】在用户窗口上输出几行字符串,当窗口接收到WM_PAINT消息后,显示的文本每次都被重新刷新。消息后,显示的文本每次都被重新刷新。#include#include#include#include#include#includelong WINAPI WndProc(long WINAPI WndProc(HWND hWnd,HWND hWnd,UINT iMessage,UINT iMessage,UINT wParam,UINT wParam,LONG lParamLONG lParam););BOOL
20、 InitWindowsClass(HINSTANCE hInstance);BOOL InitWindowsClass(HINSTANCE hInstance);BOOL InitWindows(HINSTANCE hInstance,int nCmdShow);BOOL InitWindows(HINSTANCE hInstance,int nCmdShow);HWND hWndMain;HWND hWndMain;5.3 文本操作实例文本操作实例13/主函数主函数int WINAPI WinMain(int WINAPI WinMain(HINSTANCE hInstance,HINST
21、ANCE hInstance,HINSTANCE hPrevInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,LPSTR lpCmdLine,int nCmdShowint nCmdShow)MSG Message;MSG Message;if(!InitWindowsClass(hInstance)if(!InitWindowsClass(hInstance)return FALSE;return FALSE;if(!InitWindows(hInstance,nCmdShow)return FALSE;if(!InitWindows(hIns
22、tance,nCmdShow)return FALSE;while(GetMessage(&Message,0,0,0)/while(GetMessage(&Message,0,0,0)/消息循环消息循环 TranslateMessage(&Message);TranslateMessage(&Message);DispatchMessage(&Message);DispatchMessage(&Message);return Message.wParam;return Message.wParam;14/消息处理函数消息处理函数long WINAPI WndProc(HWND hWnd,UI
23、NT iMessage,UINT wParam,LONG lParam)long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)static long nXChar,nCaps,nYChar;static long nXChar,nCaps,nYChar;HDC hDC;/HDC hDC;/定义指向设备上下文的句柄定义指向设备上下文的句柄short x;short x;TEXTMETRIC tm;TEXTMETRIC tm;short LnCount=6;short LnCount=6;PAINTSTRUCT Pt
24、Str;PAINTSTRUCT PtStr;/定义指向包含绘图信息的结构体变量定义指向包含绘图信息的结构体变量static char*textbuf=static char*textbuf=This is the First line,This is the First line,This is the second line,This is the second line,This is the third line,This is the third line,This is the fourth line,This is the fourth line,This is the fifth
25、 line,This is the fifth line,This is the sixth lineThis is the sixth line;输出的文输出的文输出的文输出的文本内容本内容本内容本内容15switch(iMessage)/switch(iMessage)/处理消息处理消息 case WM_CREATE:case WM_CREATE:/处理窗口创建消息处理窗口创建消息hDC=GetDC(hWnd);hDC=GetDC(hWnd);/获取当前设备表句柄获取当前设备表句柄 GetTextMetrics(hDC,&tm);GetTextMetrics(hDC,&tm);/获取字体信
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 文本 字体
限制150内