《文本与字体课件》由会员分享,可在线阅读,更多相关《文本与字体课件(37页珍藏版)》请在金锄头文库上搜索。
1、第第5讲讲 文本与字体文本与字体 使用定义好的与设备无关的使用定义好的与设备无关的字体字体集,集, Windows就能维就能维护它的设备无关性,提供护它的设备无关性,提供“所见即所得所见即所得”的好处,即屏幕的好处,即屏幕所见与设备输出的文本是一样的所见与设备输出的文本是一样的 WindowsGDI进行进行文本输出。在一定意义文本输出。在一定意义上,任何内容都可以看上,任何内容都可以看成成图形实体图形实体先要获得文本句柄先要获得文本句柄设置字体、字符大小、字符颜色等有关属性设置字体、字符大小、字符颜色等有关属性将这些属性选入设备环境将这些属性选入设备环境1文本与字体5.1 设置文本的设备环境设
2、置文本的设备环境字体字体逻辑字体逻辑字体定义的字符集是定义的字符集是设备无关设备无关的,它可以精确标度,因的,它可以精确标度,因此得到广泛应用此得到广泛应用描述所要显示描述所要显示的文本的大小、的文本的大小、类型和外形类型和外形物理字体物理字体是为特殊设备设计的,因而是是为特殊设备设计的,因而是设备相关设备相关的的Win 系统系统提供了七种提供了七种基本字体基本字体字体字体 说明说明ANSI_FIXED ANSI标准的标准的固定固定宽度的字体宽度的字体ANSI_VAR ANSI标准的标准的可变可变宽度的字体宽度的字体DEFAULT_GUI当前当前GUI的缺省字体的缺省字体OEM_FIXED 由
3、标准原设备制造商由标准原设备制造商(OEM)提供提供DEVICE_DEFAULT当前图形设备的字体当前图形设备的字体SYSTEM_FIXEDWindows的标准的标准固定固定宽度的字体宽度的字体SYSTEM Windows提供的提供的可变可变宽度的字体宽度的字体常作为缺省字体常作为缺省字体 WinWin用它作为用它作为系统界面字体系统界面字体2文本与字体(1) (1) 定义字体句柄变量:定义字体句柄变量: HFONT hF; /hF HFONT hF; /hF为字体的句柄为字体的句柄(2) (2) 调函数调函数GetStockObjectGetStockObject获得系统字体句柄获得系统字体
4、句柄 它返回的是系统的缺省字体它返回的是系统的缺省字体 hF= GetStockObject( ) hF= GetStockObject( ):(3) (3) 调用函数调用函数SelectObjectSelectObject将字体选入设备环将字体选入设备环境境 SelectObject(hdc,hF) SelectObject(hdc,hF);选选择择系系统统字字体体的的步步骤骤3文本与字体5.1.2 创建自定义字体创建自定义字体 若需要定义系统以外的字体,可以调用函数若需要定义系统以外的字体,可以调用函数GreateFont自行创建自行创建 HFont=CreateFont HFont=Cr
5、eateFont ( (int nHeight, int nHeight, /字体高度,字体高度,0 0采用系统缺省值,使用逻辑单位采用系统缺省值,使用逻辑单位 int nWidth, int nWidth, /字体宽度,取字体宽度,取0 0则由系统根据高宽比取最佳值则由系统根据高宽比取最佳值 int nEscapement, int nEscapement, /每每行行文字相对于页底的角度,单位为文字相对于页底的角度,单位为0.10.1度度 int nOrienation, int nOrienation, /每每个个文字相对于页底的角度,单位为文字相对于页底的角度,单位为0.10.1度度
6、DWORD nWeight, DWORD nWeight, /字体粗细度,范围为字体粗细度,范围为0 010001000 DWORD Dwltalic, DWORD Dwltalic, /如果要求字体倾斜,则取非零如果要求字体倾斜,则取非零 DWORD dwUnderline, DWORD dwUnderline, /如果要求下划线,则取非零如果要求下划线,则取非零 DWORD dwStrikeout, DWORD dwStrikeout, /如果要求中划线,则取非零如果要求中划线,则取非零 DWORD dwCharset, DWORD dwCharset, /字体所属字符集字体所属字符集 D
7、WORD dwOutputPrecision,/ DWORD dwOutputPrecision,/输出精度,一般取缺省值输出精度,一般取缺省值OUT_DEFAULT_PRECISOUT_DEFAULT_PRECIS DWORD dwClipPrecision, / DWORD dwClipPrecision, /剪裁精度,常取缺省值剪裁精度,常取缺省值CLIP_DEFAULT_PRECISCLIP_DEFAULT_PRECIS DWORD dwQuality, DWORD dwQuality, /输出质量,一般取缺省值输出质量,一般取缺省值DEFAULT_QUALITYDEFAULT_QUA
8、LITY DWORD dwPitchAndFamily, / DWORD dwPitchAndFamily, /字体名字体名) ) 可选的系统字符集:可选的系统字符集:ANSI_CHARSETANSI_CHARSETOEM_CHARSETOEM_CHARSETSYMBOL_CHARSETSYMBOL_CHARSETDEFAULT_CHARSETDEFAULT_CHARSETSHIFTJIS_CHARSETSHIFTJIS_CHARSET4文本与字体5.1.3 设置字体和背景颜色设置字体和背景颜色设置字体颜色:设置字体颜色:SetTextColor(hdc,crColor)SetTextColo
9、r(hdc,crColor);设置背景颜色设置背景颜色:SetBkColor(hdc,crColor)SetBkColor(hdc,crColor);crColorcrColor为设置的颜色为设置的颜色字体字体及背景颜色背景颜色的设置在开发过的设置在开发过程中非常重要程中非常重要5文本与字体5.2 文本的输出过程文本的输出过程确定后续文本坐标确定后续文本坐标确定换行时文本坐标确定换行时文本坐标文本输文本输出过程出过程获取字体信息获取字体信息格式化文本格式化文本调用函数输出文本调用函数输出文本6文本与字体获取字体信息获取字体信息输出文本之前要获取字体的信息,如字符高度输出文本之前要获取字体的信息
10、,如字符高度等,以确定输出格式和下一行字符的位置等,以确定输出格式和下一行字符的位置 GetTextMetrics (hdc,&tm)GetTextMetrics (hdc,&tm);/tmtm为为TEXTMETRICSTEXTMETRICS结构结构获取当前使获取当前使用字体信息用字体信息调用该函数时,系统将当前调用该函数时,系统将当前字体的信息拷贝到字体的信息拷贝到tm标识标识的的TEXTMETRICSTEXTMETRICS结构中结构中7文本与字体系统定义的系统定义的TEXTMETRICS的结构如下:的结构如下:typedef struct tagTEXTMETRIC typedef str
11、uct tagTEXTMETRIC /tm/tmLONG tmHeight; LONG tmHeight; /字符高度字符高度LONG tmAscent;LONG tmAscent; /字符基线以上高度字符基线以上高度LONG tmDescent; LONG tmDescent; /字符基线以下高度字符基线以下高度LONG tmInternalLeading;LONG tmInternalLeading;/tmHeight/tmHeight制订的字符高度顶部的控件制订的字符高度顶部的控件LONG tmExternalLeading;LONG tmExternalLeading;/行与行之间的间
12、隔行与行之间的间隔LONG tmAveCharWidth;LONG tmAveCharWidth;/平均字符宽度平均字符宽度LONG tmMaxCharWidth;LONG tmMaxCharWidth;/最大字符宽度最大字符宽度LONG tmWeight; LONG tmWeight; /字符的粗细度字符的粗细度LONG tmOverhang;LONG tmOverhang;/合成字体间附加的宽度合成字体间附加的宽度LONG tmDigitizedAspectX; LONG tmDigitizedAspectX; /为输出设备设计的为输出设备设计的X X轴尺寸轴尺寸LONG tmDigiti
13、zedAspectY; LONG tmDigitizedAspectY; /为输出设备设计的为输出设备设计的Y Y轴尺寸轴尺寸BCHAR tmFirstChar;BCHAR tmFirstChar;/字体中第一个字符值字体中第一个字符值BCHAR tmLastChar; BCHAR tmLastChar; /字体中最后一个字符值字体中最后一个字符值BCHAR tmDefaultChar; BCHAR tmDefaultChar; /代替不在字体中字符的字符代替不在字体中字符的字符BCHAR tmBreakChar;BCHAR tmBreakChar;/作为分割符的字符作为分割符的字符BYTE
14、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; /字符集字符集TEXTMETRICTEXTMETRIC8文本与字体格
15、式化文本格式化文本(1) 确定后续文本坐标确定后续文本坐标换行时确定下一行文本的坐标换行时确定下一行文本的坐标需要格式化需要格式化处理的情况处理的情况在文本行中确定后续文本的坐标在文本行中确定后续文本的坐标确定后续文本的坐标确定后续文本的坐标,应先获取当前的字符串的宽度应先获取当前的字符串的宽度, 该工作由该工作由GetTextExtentPoint32函数函数完成,并把它存储于一个完成,并把它存储于一个SIZE结构结构中。中。BooL GetTextExtentPoint32BooL GetTextExtentPoint32( ( HDC hdc,HDC hdc, LPCTSTR lpszS
16、tringLPCTSTR 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;9文本与字体(2)(2)确定
17、换行时文本坐标确定换行时文本坐标字符的高度字符的高度与与行间隔行间隔均存储在均存储在tm指向的指向的TEXTMETRICS结结构中,换行时构中,换行时Y轴上文本的起始坐标轴上文本的起始坐标cy为:为: cy=tm.tmHeight+tm.tmExternalLeading; 通过计算当前行文本通过计算当前行文本字符的高度字符的高度与与行间隔行间隔之和,即可之和,即可得到换行时文本的起始坐标得到换行时文本的起始坐标10文本与字体文本输出文本输出 常用的文本输出函数常用的文本输出函数TextOut原型如下:原型如下:BOOL TextOutBOOL TextOut( ( HDC hdc, HDC
18、hdc, int X, int Y,int X, int Y, /X, Y /X, Y为用户区中字符串的起始坐标为用户区中字符串的起始坐标 LPCTSTR lpstring, /lpstringLPCTSTR lpstring, /lpstring为显示的字符串为显示的字符串 int nCountint nCount /nCount /nCount为字符串中的字节数为字符串中的字节数) );TextOut 以坐标以坐标X,Y为起点,为起点,输出字节数为输出字节数为 nCount、名为名为lpstring中的字符串中的字符串11文本与字体5.3 5.3 文本操作实例文本操作实例【例【例5-1】在
19、用户窗口上输出几行字符串,当窗口接收到】在用户窗口上输出几行字符串,当窗口接收到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 InitWindowsClass(HINSTANC
20、E hInstance);BOOL InitWindowsClass(HINSTANCE hInstance);BOOL InitWindows(HINSTANCE hInstance,int nCmdShow);BOOL InitWindows(HINSTANCE hInstance,int nCmdShow);12文本与字体/主函数主函数int WINAPI WinMain(int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hInstance,HINSTANCE hPrevInstance,HINSTANCE hPrevInstance,LP
21、STR 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(hInstance,nCmdShow)return FALSE;while(GetMessage(&Message,0,0,0)/w
22、hile(GetMessage(&Message,0,0,0)/消息循环消息循环 TranslateMessage(&Message);TranslateMessage(&Message);DispatchMessage(&Message);DispatchMessage(&Message); return Message.wParam;return Message.wParam; 13文本与字体/消息处理函数消息处理函数long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)long WINAPI WndProc
23、(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam) static long nXChar, nYChar;static long nXChar, nYChar;HDC hDC; /HDC hDC; /定义指向设备上下文的句柄定义指向设备上下文的句柄short x;short x; TEXTMETRIC tm;TEXTMETRIC tm;short LnCount=6;short LnCount=6;PAINTSTRUCT PtStr; PAINTSTRUCT PtStr; /定义指向包含绘图信息的结构体变量定义指向包含绘图信息的结构体变量stat
24、ic 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 line,This is the fifth line,This is the sixth lineThis
25、is the sixth line;输出的文输出的文本内容本内容14文本与字体switch(iMessage) /switch(iMessage) /处理消息处理消息 case WM_CREATE:case WM_CREATE:/处理窗口创建消息处理窗口创建消息hDC=GetDC(hWnd) ; hDC=GetDC(hWnd) ; /获取当前设备表句柄获取当前设备表句柄 GetTextMetrics(hDC,&tm); GetTextMetrics(hDC,&tm); /获取字体信息获取字体信息 nXChar=tm.tmAveCharWidth; nXChar=tm.tmAveCharWidt
26、h; /获取字符宽度获取字符宽度 nYChar=tm.tmHeight+tm.tmExternalLeading;nYChar=tm.tmHeight+tm.tmExternalLeading; ReleaseDC(hWnd,hDC); ReleaseDC(hWnd,hDC); /释放当前设备句柄释放当前设备句柄 return 0;return 0; case WM_PAINT: case WM_PAINT: /处理重画消息处理重画消息 hDC=BeginPaint(hWnd,&PtStr); hDC=BeginPaint(hWnd,&PtStr); /开始绘画开始绘画 for(x=0;xLn
27、Count;x=x+1) for(x=0;xLnCount;x=x+1) /输出文本输出文本 TextOut(hDC,nXChar,nYChar*(1+x),textbufx,lstrlen(textbufx); TextOut(hDC,nXChar,nYChar*(1+x),textbufx,lstrlen(textbufx); EndPaint(hWnd,&PtStr);EndPaint(hWnd,&PtStr); return 0;return 0; case WM_DESTROY: case WM_DESTROY: /结束应用程序结束应用程序 PostQuitMessage(0);Po
28、stQuitMessage(0); return 0;return 0; default: default:/其他消息处理程序其他消息处理程序 return(DefWindowProc(hWnd,iMessage,wParam,lParam) ; return(DefWindowProc(hWnd,iMessage,wParam,lParam) ; 15文本与字体BOOL InitWindowsClass(HINSTANCE hInstance)BOOL InitWindowsClass(HINSTANCE hInstance)/初始化窗口类初始化窗口类 WNDCLASS WndClass;W
29、NDCLASS WndClass;WndClass.style=CS_HREDRAW|CS_VREDRAW;WndClass.style=CS_HREDRAW|CS_VREDRAW;return RegisterClass(&WndClass);return RegisterClass(&WndClass); BOOL InitWindows(HINSTANCE hInstance,int nCmdShow)BOOL InitWindows(HINSTANCE hInstance,int nCmdShow) / /初始化窗口初始化窗口 HWND hWnd;HWND hWnd;hWnd=Crea
30、teWindow(WinText, /hWnd=CreateWindow(WinText, /生成窗口生成窗口 文本显示示例程序文本显示示例程序,WS_OVERLAPPEDWINDOW,WS_OVERLAPPEDWINDOW,.;.;NULL);NULL);if(!hWnd)if(!hWnd)return FALSE;return FALSE;ShowWindow(hWnd,nCmdShow);ShowWindow(hWnd,nCmdShow);/显示窗口显示窗口UpdateWindow(hWnd);UpdateWindow(hWnd);return TRUE;return TRUE; 16文
31、本与字体【例【例5-25-2】本程序通过在窗口中分五行分别显示五行文】本程序通过在窗口中分五行分别显示五行文本,以说明在窗口的用户区中输出文本的方法。本,以说明在窗口的用户区中输出文本的方法。17文本与字体本例题的源代码如下:#include #include #include #include #include #include #include #include LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);int WINAPI WinM
32、ain(int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hInstance, HINSTANCE hPrevInst,HINSTANCE hPrevInst,LPSTR lpszCmdLine,LPSTR lpszCmdLine,int nCmdShowint nCmdShow) ) HWND hwnd;HWND hwnd; MSG Msg;MSG Msg; WNDCLASS wndclass;WNDCLASS wndclass; char lpszClassName = char lpszClassName = 文本输出文本输出; ; cha
33、r lpszTitle= EXAMPLE FOR THE TEXT OUTPUT;char lpszTitle= EXAMPLE FOR THE TEXT OUTPUT; wndclass.style = 0;wndclass.style = 0; ; wndclass.lpszClassName = lpszClassName;wndclass.lpszClassName = lpszClassName;18文本与字体if( !RegisterClass( &wndclass)if( !RegisterClass( &wndclass) MessageBeep(0);return FALSE
34、; MessageBeep(0);return FALSE; hwnd = CreateWindowhwnd = CreateWindow( ( lpszClassName,lpszClassName,lpszTitle,lpszTitle,WS_OVERLAPPEDWINDOW,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL, NULL,NULL, hInst
35、ance,hInstance,NULL);NULL);ShowWindow( hwnd, nCmdShow);ShowWindow( hwnd, nCmdShow);UpdateWindow(hwnd);UpdateWindow(hwnd);while( GetMessage(&Msg,NULL,0,0)while( GetMessage(&Msg,NULL,0,0) TranslateMessage(&Msg);TranslateMessage(&Msg); DispatchMessage(&Msg);DispatchMessage(&Msg); return Msg.wParam;retu
36、rn Msg.wParam; 19文本与字体LRESULT CALLBACK WndProc(HWND hwnd,UINT message,LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)WPARAM wParam,LPARAM lParam) HDC hdc;HDC hdc;HFONT hF_black,hF_big;HFONT hF_black,hF_big;/定义两种字体句柄定义两种字体句柄PAINTSTRUCT ps;PAINTSTRUCT ps;TEXTMETRIC tm;TEXT
37、METRIC tm;/定义一个定义一个TEXTMETRICTEXTMETRIC结构,用以记录字体信息结构,用以记录字体信息char lpsz_1=char lpsz_1=这是一行红色的、字体为这是一行红色的、字体为SYSTEM_FONTSYSTEM_FONT的文字,红色代表未来。的文字,红色代表未来。;char lpsz_2=char lpsz_2=现在显示的是自定义字体,颜色为绿色,绿色代表生机勃勃。现在显示的是自定义字体,颜色为绿色,绿色代表生机勃勃。;char lpsz_3=char lpsz_3=现在展现在您面前的是蓝色的粗体字,蓝色代表广阔的海洋和天空。现在展现在您面前的是蓝色的粗体
38、字,蓝色代表广阔的海洋和天空。;char lpsz_4=char lpsz_4=当前字体为大号、斜体并带有下划线的文字。当前字体为大号、斜体并带有下划线的文字。;char lpsz_5=char lpsz_5=现在您掌握了字体的操作了吗现在您掌握了字体的操作了吗?;?;char lpsz_6=char lpsz_6=祝您成功祝您成功!;!;int X=0,Y=0;int X=0,Y=0;SIZE size;SIZE size;/定义一个定义一个SIZESIZE类型的结构类型的结构20文本与字体switch(message)switch(message) case WM_PAINT:case W
39、M_PAINT:hdc=BeginPaint(hwnd,&ps);hdc=BeginPaint(hwnd,&ps);SetTextColor(hdc,RGB(255,0,0);SetTextColor(hdc,RGB(255,0,0);/设置文本颜色为红色设置文本颜色为红色GetTextMetrics(hdc,&tm); /GetTextMetrics(hdc,&tm); /获取缺省字体,写入获取缺省字体,写入tmtm结构中结构中TextOut(hdc,X,Y,lpsz_1,strlen(lpsz_1);/TextOut(hdc,X,Y,lpsz_1,strlen(lpsz_1);/用当前字体
40、输出文本用当前字体输出文本Y=Y+tm.tmHeight+100*tm.tmExternalLeading;Y=Y+tm.tmHeight+100*tm.tmExternalLeading;/计算换行时下一行文本的输出坐标计算换行时下一行文本的输出坐标hF_blackhF_black= =CreateFontCreateFont( ( /创建自定义字体创建自定义字体 20,20,/字体的高度字体的高度 0, 0,/由系统根据高宽比选取字体最佳宽度值由系统根据高宽比选取字体最佳宽度值 0, 0,/文本的倾斜度为文本的倾斜度为0 0,表示水平,表示水平 0, 0,/字体的倾斜度为字体的倾斜度为0
41、0 FW_HEAVY, FW_HEAVY,/字体的粗度,字体的粗度,FW_HEAVYFW_HEAVY为最粗为最粗 0, 0,/非斜体字非斜体字 0, 0,/无下划线无下划线 0, 0,/无删除线无删除线 ANSI_CHARSET, ANSI_CHARSET,/表示所用的字符集为表示所用的字符集为ANSI_CHARSETANSI_CHARSET OUT_DEFAULT_PRECIS, OUT_DEFAULT_PRECIS,/输出精度为缺省精度输出精度为缺省精度 CLIP_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,/剪裁精度为缺省精度剪裁精度为缺省精度 DEFAULT
42、_QUALITY, DEFAULT_QUALITY,/输出质量为缺省值输出质量为缺省值 DEFAULT_PITCH|FF_DONTCARE,/ DEFAULT_PITCH|FF_DONTCARE,/字间距和字体系列使用缺省值字间距和字体系列使用缺省值 粗体字粗体字 );); /字体名称字体名称21文本与字体SetTextColor(hdc,RGB(0,255,0);SetTextColor(hdc,RGB(0,255,0);/设置文本颜色为绿色设置文本颜色为绿色SelectObject(hdc,hF_black);SelectObject(hdc,hF_black);/将自定义字体选入设备环境
43、将自定义字体选入设备环境GetTextMetrics(hdc,&tm); /GetTextMetrics(hdc,&tm); /获取字体的信息,写入获取字体的信息,写入tmtm结构中结构中TextOut(hdc,X,Y,lpsz_2,strlen(lpsz_2);/TextOut(hdc,X,Y,lpsz_2,strlen(lpsz_2);/用当前字体输出文本用当前字体输出文本/换行继续输出文本,计算新行的起始换行继续输出文本,计算新行的起始Y Y坐标位置坐标位置Y=Y+tm.tmHeight+10*tm.tmExternalLeading;Y=Y+tm.tmHeight+10*tm.tmEx
44、ternalLeading;GetTextExtentPoint32(hdc,lpsz_2,strlen(lpsz_2),&size);GetTextExtentPoint32(hdc,lpsz_2,strlen(lpsz_2),&size);/获取字符串获取字符串/ /的宽度的宽度SetTextColor(hdc,RGB(0,0,255);SetTextColor(hdc,RGB(0,0,255);/设置文本颜色为蓝色设置文本颜色为蓝色TextOut(hdc,X,Y,lpsz_3,strlen(lpsz_3);/TextOut(hdc,X,Y,lpsz_3,strlen(lpsz_3);/当
45、前字体输出文本当前字体输出文本Y=Y+tm.tmHeight+20*tm.tmExternalLeading; Y=Y+tm.tmHeight+20*tm.tmExternalLeading; 22文本与字体hF_big=CreateFonthF_big=CreateFont/引入新字体引入新字体( (30,30,/字体高度字体高度0,0,0,0,0,0,FW_NORMAL,FW_NORMAL,1,1,/定义斜体定义斜体1,1,/定义输出时带下划线定义输出时带下划线0,0,ANSI_CHARSET,ANSI_CHARSET,/所使用的字符集所使用的字符集OUT_DEFAULT_PRECIS,O
46、UT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_QUALITY,DEFAULT_PITCH|FF_DONTCARE,DEFAULT_PITCH|FF_DONTCARE, 大号字大号字 ););23文本与字体SelectObject(hdc,hF_big);/SelectObject(hdc,hF_big);/将自定义字体选入设备环境将自定义字体选入设备环境SetTextColor(hdc,RGB(155,155,155);SetTextColor(hdc,RGB(155,155,
47、155); /设置文本颜色设置文本颜色Y=Y+tm.tmHeight+20*tm.tmExternalLeading;Y=Y+tm.tmHeight+20*tm.tmExternalLeading;TextOut(hdc,X,Y,lpsz_4,strlen(lpsz_4);/TextOut(hdc,X,Y,lpsz_4,strlen(lpsz_4);/输出文本输出文本SetTextColor(hdc,RGB(255,0,0);/SetTextColor(hdc,RGB(255,0,0);/设置文本颜色为红色设置文本颜色为红色Y=Y+tm.tmHeight+30*tm.tmExternalLea
48、ding;Y=Y+tm.tmHeight+30*tm.tmExternalLeading;TextOut(hdc,X,Y,lpsz_5,strlen(lpsz_5); TextOut(hdc,X,Y,lpsz_5,strlen(lpsz_5); /输出文本输出文本/在该行继续输出文本在该行继续输出文本GetTextExtentPoint32(hdc,lpsz_5,strlen(lpsz_5),&size);GetTextExtentPoint32(hdc,lpsz_5,strlen(lpsz_5),&size);/获取字符串的宽度获取字符串的宽度X=X+size.cx;X=X+size.cx;
49、/获取起始坐标获取起始坐标TextOut(hdc,X,Y,lpsz_6,strlen(lpsz_6); TextOut(hdc,X,Y,lpsz_6,strlen(lpsz_6); /输出文本输出文本EndPaint(hwnd,&ps);EndPaint(hwnd,&ps);break;break;24文本与字体case WM_DESTROY:case WM_DESTROY: DeleteObject(hF_black); DeleteObject(hF_black); /退出窗口时删除自定义字体退出窗口时删除自定义字体 DeleteObject(hF_big); DeleteObject(h
50、F_big); PostQuitMessage(0); PostQuitMessage(0); break; break;default:default: return DefWindowProc(hwnd,message,wParam,lParam); return DefWindowProc(hwnd,message,wParam,lParam); return 0;return 0; 25文本与字体【5-35-3】在窗口中显示出】在窗口中显示出2626个英文字母,个英文字母,从左向右从左向右字母依次位置提高字母依次位置提高1010个象素单位,并且颜色变为红色,然后回到正常位置;当到达最右
51、个象素单位,并且颜色变为红色,然后回到正常位置;当到达最右端后改变方向从右向左依次变成红色并位置提高端后改变方向从右向左依次变成红色并位置提高1010个象素单位。在窗个象素单位。在窗口的第二行显示口的第二行显示2626个字母,字体从正常到斜体,颜色从黑色到天蓝色个字母,字体从正常到斜体,颜色从黑色到天蓝色不断变换。如图所示。不断变换。如图所示。用用nCharnChar标志红标志红色跳起字母在色跳起字母在2626个字母的位置个字母的位置用用bRightbRight,bLeftbLeft标志当前标志当前移动方向,初始化移动方向,初始化bRight=TRUEbRight=TRUE,bLeft=FAL
52、SEbLeft=FALSE26文本与字体本例题要解决本例题要解决动态显示动态显示问题问题: :首先处理第一行字符:在首先处理第一行字符:在WM_PAINTWM_PAINT消息处理程序中,在得到了设消息处理程序中,在得到了设备环境句柄备环境句柄hDChDC后,调用用户自定义的函数后,调用用户自定义的函数CreateFont(hDC,nHeight,bItalic)CreateFont(hDC,nHeight,bItalic),第一个参数,第一个参数hDChDC是设备环境是设备环境句柄,第句柄,第2 2个参数个参数nHeightnHeight是字体高度,第是字体高度,第3 3个参数个参数bItal
53、icbItalic是斜字是斜字体的标志变量体的标志变量WM_CREATEWM_CREATE消息处理程序消息处理程序定时器定时器调用调用SetTimer()SetTimer()创建创建WM_TIMERWM_TIMER消息处消息处理程序理程序调用调用InvalidateRect()InvalidateRect()刷新刷新用户区用户区发送发送WM_PAINTWM_PAINT消息消息实现实现动态动态显示显示27文本与字体下面这段程序按照黑色的字体输出从字符串开头到当前位置的字符串:下面这段程序按照黑色的字体输出从字符串开头到当前位置的字符串: Y=tm.tmExternalLeading+10; Y=
54、tm.tmExternalLeading+10;/设置输出字符的设置输出字符的Y Y坐标坐标 for(i=0;inChar;i+) for(i=0;inChar;i+) SetTextColor(hDC,RGB(0,0,0); SetTextColor(hDC,RGB(0,0,0);/设置字体的颜色为黑色设置字体的颜色为黑色 X=X+tm.tmAveCharWidth*2; X=X+tm.tmAveCharWidth*2;/设置输出字符的设置输出字符的X X坐标坐标 TextOut(hDC,X,Y,&lpsz_1i,1);/ TextOut(hDC,X,Y,&lpsz_1i,1);/输出从第输
55、出从第0 0个到第个到第nChar-1nChar-1个字符个字符 下面输出当前位置上的字符,当前位置的字符位置提高下面输出当前位置上的字符,当前位置的字符位置提高1010个象素单位,个象素单位,字体颜色为红色:字体颜色为红色:SetTextColor(hDC,RGB(255,0,0);/SetTextColor(hDC,RGB(255,0,0);/设置字体的颜色为红色设置字体的颜色为红色X=X+tm.tmAveCharWidth*2;X=X+tm.tmAveCharWidth*2;/设置输出字符的设置输出字符的X,YX,Y坐标坐标Y=tm.tmExternalLeading;Y=tm.tmEx
56、ternalLeading;/提高提高1010个像素个像素hF = CreateFont(hDC,40,0);hF = CreateFont(hDC,40,0);/创建字体创建字体SelectObject(hDC,hF);SelectObject(hDC,hF);/选入字体选入字体TextOut(hDC,X,Y,&lpsz_1nChar,1);/TextOut(hDC,X,Y,&lpsz_1nChar,1);/输出第输出第nCharnChar个字符个字符Y=tm.tmExternalLeading+10;Y=tm.tmExternalLeading+10;for(i=nChar+1;inCha
57、rlen;i+)for(i=nChar+1;inCharlen;i+) SetTextColor(hDC,RGB(0,0,0); / SetTextColor(hDC,RGB(0,0,0); /设置字体的颜色为黑色设置字体的颜色为黑色 X=X+tm.tmAveCharWidth*2; / X=X+tm.tmAveCharWidth*2; /设置输出字符的设置输出字符的X X坐标坐标 TextOut(hDC,X,Y,&lpsz_1i,1); TextOut(hDC,X,Y,&lpsz_1i,1);/输出后面的字符输出后面的字符 28文本与字体 下面设置下面设置bRightbRight和和bLef
58、tbLeft的值。的值。if(nChar = nCharlen)if(nChar = nCharlen)/当输出到最后的一个字符时当输出到最后的一个字符时 bRight = FALSE;bRight = FALSE;/改变红色字移动的方向为向左改变红色字移动的方向为向左bLeft = TRUE;bLeft = TRUE; else(nChar = 0)else(nChar = 0)/当输出到第一个字时当输出到第一个字时 bRight = TRUE;bRight = TRUE;/改变红色字移动的方向为向右改变红色字移动的方向为向右bLeft = FALSE;bLeft = FALSE; if(b
59、Right = TRUE) nChar+;if(bRight = TRUE) nChar+;else nChar-;else nChar-;如果如果nChar=nChar=等于字符串长度等于字符串长度= =已到了字符串末尾,将已到了字符串末尾,将bRightbRight置为置为TrueTrue字符长度字符长度=0=0时,已到了最左端,将时,已到了最左端,将bLeftbLeft置为置为TrueTrue;当当bRight=TruebRight=True时字符位置标志时字符位置标志nCharnChar加加1 1,当,当bLeft=TruebLeft=True时,字符位置标时,字符位置标志变量减志变量
60、减1 1。29文本与字体下面输出第下面输出第2 2行字符:在行字符:在WM_PAINTWM_PAINT处理程序中,加入下列代码:处理程序中,加入下列代码:hF = CreateFont(hDC,40,bItalic);hF = CreateFont(hDC,40,bItalic);/创建字体创建字体. .大小为大小为4040SelectObject(hDC,hF);SelectObject(hDC,hF);/选入字体选入字体X = tm.tmAveCharWidth*2;X = tm.tmAveCharWidth*2;/设置输出位置设置输出位置Y = tm.tmHeight*2;Y = tm.
61、tmHeight*2;if(bItalic = TRUE) if(bItalic = TRUE) SetTextColor(hDC,RGB(0,0,0);SetTextColor(hDC,RGB(0,0,0); else else SetTextColor(hDC,RGB(0,255,255);SetTextColor(hDC,RGB(0,255,255);TextOut(hDC,X,Y,lpsz_1,strlen(lpsz_1);TextOut(hDC,X,Y,lpsz_1,strlen(lpsz_1);/输出输出if(bItalic = TRUE) if(bItalic = TRUE) b
62、Italic=FALSE;bItalic=FALSE; else else bItalic=TRUE;bItalic=TRUE;调用用户自定义函数调用用户自定义函数CreateFont()CreateFont()创建斜体字,确定输出位置创建斜体字,确定输出位置根据根据bItalicbItalic的状态设置字体的颜色。的状态设置字体的颜色。当当bItalicbItalic为真时,输出斜体天蓝色字符;为假时,输出正常黑色字体为真时,输出斜体天蓝色字符;为假时,输出正常黑色字体最后对最后对bItalicbItalic取反,在下一次显示与此次不同的另一种效果。取反,在下一次显示与此次不同的另一种效果。
63、30文本与字体【例【例5-4】将一首四句的古诗从右到左竖排输出。要求窗口每次接收】将一首四句的古诗从右到左竖排输出。要求窗口每次接收到到WM_PAINT消息时都刷新显示的文本。消息时都刷新显示的文本。 31文本与字体#include#include#include#include#include#includelong WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam);long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam);BOOL I
64、nitWindowsClass(HINSTANCE hInstance);BOOL InitWindowsClass(HINSTANCE hInstance);BOOL InitWindows(HINSTANCE hInstance,int nCmdShow);BOOL InitWindows(HINSTANCE hInstance,int nCmdShow);/主函数主函数int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, int WINAPI WinMain(HINSTANCE hInstance, HINSTA
65、NCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)LPSTR lpCmdLine, int nCmdShow) MSG Message;MSG Message;if(!InitWindowsClass(hInstance)if(!InitWindowsClass(hInstance)return FALSE;return FALSE;if(!InitWindows(hInstance,nCmdShow)if(!InitWindows(hInstance,nCmdShow)return FALSE;return FALSE;while(GetMes
66、sage(&Message,0,0,0)while(GetMessage(&Message,0,0,0)/消息循环消息循环TranslateMessage(&Message);TranslateMessage(&Message);DispatchMessage(&Message);DispatchMessage(&Message); return Message.wParam;return Message.wParam; 32文本与字体long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)long WINAPI
67、WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)1. static long nXChar,nCaps,nYChar;1. static long nXChar,nCaps,nYChar;2. int pointx,pointy,int i,j;2. int pointx,pointy,int i,j;3. HDC hDC; 3. HDC hDC; /定义指向设备环境的句柄定义指向设备环境的句柄4. TEXTMETRIC tm;4. TEXTMETRIC tm;/存放字体各种属性的结构体变量存放字体各种属性的结构体变量5. PAI
68、NTSTRUCT PtStr; 5. PAINTSTRUCT PtStr; /指向包含绘图信息的结构体变量指向包含绘图信息的结构体变量6. static char *textbuf4=6. static char *textbuf4=故人西辞黄鹤楼故人西辞黄鹤楼, , 烟花三月下扬州烟花三月下扬州, 孤帆远影碧空尽孤帆远影碧空尽, , 唯见长江天际流唯见长江天际流;7. switch(iMessage) 7. switch(iMessage) /处理消息处理消息8. 8. case WM_CREATE:case WM_CREATE:/处理窗口创建消息处理窗口创建消息9.9. hDC=GetDC
69、(hWnd) ; hDC=GetDC(hWnd) ; /获取当前设备表句柄获取当前设备表句柄10.10. GetTextMetrics(hDC,&tm); GetTextMetrics(hDC,&tm); /获取字体信息获取字体信息11.11. nXChar=tm.tmAveCharWidth; nXChar=tm.tmAveCharWidth; /获取字符宽度获取字符宽度12. nYChar=tm.tmHeight+tm.tmExternalLeading;12. nYChar=tm.tmHeight+tm.tmExternalLeading;/字符高度字符高度13.13. nCaps=(t
70、m.tmPitchAndFamily&1?3:2)*nXChar/2; nCaps=(tm.tmPitchAndFamily&1?3:2)*nXChar/2;/字间距字间距14.14. ReleaseDC(hWnd,hDC); return 0; ReleaseDC(hWnd,hDC); return 0;/释放当前设备句柄释放当前设备句柄15.15.case WM_PAINT: case WM_PAINT: /处理重画消息处理重画消息16.16. hDC=BeginPaint(hWnd,&PtStr); hDC=BeginPaint(hWnd,&PtStr); /开始绘图开始绘图17.17.
71、 for(i=4;i0;i-) for(i=4;i0;i-) 18.18. for(j=0;j7;j+)for(j=0;j7;j+)/输出文本输出文本19.19. pointx=100+i*nXChar*5; pointx=100+i*nXChar*5;pointy=50+j*(nYChar+nCaps);pointy=50+j*(nYChar+nCaps);20.20. TextOut(hDC,pointx,pointy,textbuf4-i+j*2,2); TextOut(hDC,pointx,pointy,textbuf4-i+j*2,2); 21. EndPaint(hWnd,&PtS
72、tr); return 0; 21. EndPaint(hWnd,&PtStr); return 0; /结束绘图结束绘图22.22.case WM_DESTROY: /case WM_DESTROY: /结束应用程序结束应用程序 PostQuitMessage(0); PostQuitMessage(0);return 0;return 0;23.23.default:default:return(DefWindowProc(hWnd,iMessage,wParam,lParam);return(DefWindowProc(hWnd,iMessage,wParam,lParam);33文本与
73、字体【例【例5-5】创创建自定建自定义义字体的例字体的例题题程序程序。在窗口中。在窗口中显示显示“自定义的字体自定义的字体”,字体颜色为红色,字体颜色为红色,背景色为蓝色。其运行结果应如下图所示:背景色为蓝色。其运行结果应如下图所示: 34文本与字体LRESULT CALLBACK WndProc( HWND hwnd,UINT message, WPARAM wParam,LPARAM lParam) 1. HDC hdc ;/设备句柄设备句柄 2. PAINTSTRUCT ps ;/画刷结构画刷结构 3. int Xchar,Ychar; 4. SIZE size; 5. LPCTSTR
74、*pstring= “自定义的字体自定义的字体”; 6. RECTrect ;/无效矩形区无效矩形区 7. HFONT holdFont,hnewFont; 8. switch (message)/消息处理函数消息处理函数9. case WM_CREATE: return 0; /窗口创建窗口创建10. case WM_PAINT:/绘制消息绘制消息11.hnewFont=CreateFont /创建一种新的逻辑字体创建一种新的逻辑字体12. ( 64,0, 0, 0, 500,0,0,0,13. GB2312_CHARSET,14. OUT_DEFAULT_PRECIS,15. CLIP_D
75、EFAULT_PRECIS,16. DEFAULT_QUALITY,17. DEFAULT_PITCH & FF_DONTCARE,18. “黑体黑体”);35文本与字体19. hdc=BeginPaint (hwnd, &ps); /得到设备环境句柄得到设备环境句柄20. GetClientRect (hwnd, &rect); /得到需要绘制的客户区得到需要绘制的客户区21.holdFont=(HFONT)SelectObject(hdc,hnewFont); /选择新的字体选择新的字体22. SetTextColor(hdc,RGB(255,0,0); /设置文本颜色设置文本颜色23.
76、SetBkColor(hdc,RGB(0,0,255); /设置背景颜色设置背景颜色 24. GetTextExtentPoint32(hdc,pstring,12,&size);25.Xchar=(rect.right-rect.left)/2-size.cx/2; 26. Ychar=(rect.bottom-rect.top)/2-size.cy/2;27. TextOut(hdc,Xchar,Ychar,pstring,12);28. SelectObject(hdc,holdFont); /保存原来的字体格式保存原来的字体格式29. DeleteObject(hnewFont); /
77、删除新的字体格式删除新的字体格式30. EndPaint (hwnd, &ps) ; /结束绘制结束绘制 return 0 ; case WM_DESTROY:/退出消息退出消息PostQuitMessage (0) ;return 0 ; return DefWindowProc(hwnd,message,wParam,lParam) ;36文本与字体t!pYmUjRgOcL9I6E3B+y(v%r#oXlTiQeNbK8G5D2A-x*t$qZnVkShPdMaI7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(u%r#oWlTiQeNbJ8G5D1A-x*t$qYnVkSgPd
78、MaI7F3C0z)v&s!pXmUiRfOcK9H6E2B+x(u%rZoWlThQeMbJ8G4D1A-w*t$qYnVjSgPdLaI7F3C0y)v&s#pXmUiRfNcK9H5E2B+x(u$rZoWkThQeMbJ7G4D1z-w*t!qYmVjSgOdLaI6F3B0y)v%s#pXlUiRfNcK8H5E2A+x(u$rZnWkThPeMbJ7G4C1z-w&t!qYmVjRgOdL9I6F3B0y(v%s#oXlUiQfNbK8H5D2A+x*u$qZnWkShPeMaJ7G4C1z)w&t!pYmVjRgOcL9I6E3B0y(v%r#oXlTiQfNbK8G5D2A-x
79、*u$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(u%r#oWlTiQeNbK8G5D1A-x*t$qZnVkSgPdMaI7F4C0z)v&s!pXmUjRfOcK9H6E2B+y(u%rZoWlThQeNbJ8G4D1A-w*t$qYnVjSgPdLaI7F3C0z)v&s#pXmUiRfOcK9H5E2B+x(u%rZoWkThQeMbJ8G4D1z-w*t!qYnVjSgOdLaI6F3C0y)v%s#pXlUiRfNcK8H5E2A+x(u$rZoWkThPeMbJ7G4D1z-w&t!qYmVjSgOdL9I6F3B0y)v%s#oXlUiQ
80、fNcK8H5D2A+x*u$rZnWkShPeMaJ7G4C1z)w&t!pYmVjRgOcL9I6E3B0y(v%s#oXlTiQfNbK8H5D2A-x*u$qZnWkShPdMaJ7F4C1z)w&s!pYmUjRgOcL9H6E3B+y(v%r#oWlTiQeNbK8G5D1A-x*t$qZnVkShPdMaI7F4C0z)w&s!pXmUjRfOcL9H6E2B+y(u%r#oWlThQeNbJ8G5D1A-w*t$qYnVkSgPdLaI7F3C0z)v&s#pXmUiRfOcK9H5E2B+x(u%rZoWlThQeMbJ8G4D1A-w*t!qYnVjSgPdLaI6F3C0
81、y)v&s#pXlUiRfNcK9H5E-w*t$qYnVkSgPdLaI7F3C0z)v&s!pXmUiRfOcK9H6E2B+x(u%rZoWlThQeMbJ8G4D1A-w*t!qYnVjSgPdLaI6F3C0y)v&s#pXlUiRfNcK9H5E2A+x(u$rZoWkThQeMbJ7G4D1z-w*t!qYmVjSgOdLaI6F3B0y)v%s#pXlUiQfNcK8H5E2A+x*u$rZnWkThPeMaJ7G4C1z-w&t!pYmVjRgOdL9I6E3B0y(v%s#oXlUiQfNbK8H5D2A+x*u$qZnWkShPeMaJ7F4C1z)w&t!pYmUjRg
82、OcL9I6E3B+y(v%r#oXlTiQeNbK8G5D2A-x*t$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(u%r#oWlTiQeNbJ8G5D1A-x*t$qYnVkSgPdMaI7F3C0z)v&s!pXmUiRfOcK9H6E2B+x(u%rZoWlThQeNbJ8G4D1A-w*t$qYnVjSgPdLaI7F3C0y)v&s#pXmUiRfNcK9H5E2B+x(u$rZoWkThQeMbJ7G4D1z-w*t!qYmVjSgOdLaI6F3C0y)v%s#pXlUiRfNcK8H5E2A+x(u$rZnWkThPeMbJ7G4C1z
83、-w&t!qYmVjRgOdL9I6F3B0y(v%s#oXlUiQfNbK8H5D2A+x*u$rZnWkShPeMaJ7G4C1z)w&t!pYmVjRgOcL9I6E3B0y(v%r#oXlTiQfNbK8G5D2A-x*u$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(v%r#oWlTiQeNbK8G5D1A-x*t$qZnVkSgPdMaI7F4C0z)v&s!pXmUjRfOcK9H6E2B+y(u%rZoWlThQeNbJ8G4D1A-w*t$qYnVkSgPdLaI7F3C0z)v&s#pXmUiRfOcK9H5E2B+x(u%rZoWkT
84、hQeMbJ8G4D1z-w*t!qYnVjSgOdLaI6F3C0y)v%s#pXlUiRfNcK8H5E2A+x(u$rZoWkThPeMbJ7G4D1z-w&t!qYmVjSgOdL9I6F3B0y)v%s#oXlUiQfNc4D1z-w*t!qYnVjSgOdLaI6F3C0y)v&s#pXlUiRfNcK9H5E2A+x(u$rZoWkThPeMbJ7G4D1z-w&t!qYmVjSgOdL9I6F3B0y)v%s#oXlUiQfNcK8H5D2A+x*u$rZnWkThPeMaJ7G4C1z-w&t!pYmVjRgOdL9I6E3B0y(v%s#oXlTiQfNbK8H5D2A-x
85、*u$qZnWkShPdMaJ7F4C1z)w&s!pYmUjRgOcL9H6E3B+y(v%r#oXlTiQeNbK8G5D2A-x*t$qZnVkShPdMaI7F4C0z)w&s!pXmUjRfOcL9H6E2B+y(u%r#oWlThQeNbJ8G5D1A-w*t$qYnVkSgPdMaI7F3C0z)v&s!pXmUiRfOcK9H6E2B+x(u%rZoWlThQeMbJ8G4D1A-w*t!qYnVjSgPdLaI6F3C0y)v&s#pXlUiRfNcK9H5E2A+x(u$rZoWkThQeMbJ7G4D1z-w*t!qYmVjSgOdLaI6F3B0y)v%s#pXlUiQ
86、fNcK8H5E2A+x*u$rZnWkThPeMaJ7G4C1z-w&t!pYmVjRgOdL9I6F3B0y(v%s#oXlUiQfNbK8H5D2A+x*u$qZnWkShPeMaJ7F4C1z)w&t!pYmUjRgOcL9I6E3B+y(v%r#oXlTiQeNbK8G5D2A-x*u$qZnVgOdL9I6F3B0y(v%s#oXlUiQfNbK8H5D2A+x*u$qZnWkShPeMaJ7F4C1z)w&t!pYmUjRgOcL9I6E3B+y(v%r#oXlTiQfNbK8G5D2A-x*u$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRfO8H5D2A+x*u$
87、qZnWkShPeMaJ7F4C1z)w&t!pYmVjRgOcL9I6E3B0y(v%r#oXlTiQfNbK8G5D2A-x*u$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(u%r#oWlTiQe7G4C1z)w&t!pYmVjRgOcL9I6E3B0y(v%r#oXlTiQfNbK8G5D2A-x*u$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(v%r#oWlTiQeNbK8G5D1A-x*t$qZnVkOcL9I6E3B0y(v%r#oXlTiQfNbK8G5D2A-x*u$qZnVkShPdMaJ7F4C
88、0z)w&s!pYmUjRgOcL9H6E3B+y(v%r#oWlTiQeNbK8G5D1A-x*t$qZnVkSgPdMaI7F4C0%r#oXlTiQfNbK8G5D2A-x*u$qZnWkShPdMaJ7F4C1z)w&s!pYmUjRgOcL9H6E3B+y(v%r#oWlTiQeNbK8G5D1A-x*t$qZnVkSgPdMaI7F4C0z)v&s!pXmUfNbK8H5D2A-x*u$qZnWkShPdMaJ7F4C1z)w&s!pYmUjRgOcL9H6E3B+y(v%r#oWlTiQeNbK8G5D1A-x*t$qZnVkSgPdMaI7F4C0z)w&s!pXmUjRfOH
89、5D2A-x*u$qZnWkShPdMaJ7F4C1z)w&s!pYmUjRgOcL9H6E3B+y(v%r#oWlTiQeNbK8G5D1A-x*t$qZnVkShPdMaI7F4C0z)w&s!pXmUjRfOcL9H6E2B+y(u%r#oWlThQeNbJ8G5D1A-w*t$qYjRgOcL9H6E3B+y(v%r#oXlTiQeNbK8G5D2A-x*t$qZnVkShPdMaI7F4C0z)w&s!pXmUjRfOcL9H6E2B+y(u%r#oWlThQeNbJ8G5D1A-w*tYmUjRgOcL9I6E3B+y(v%r#oXlTiQeNbK8G5D2A-x*t$qZnVkS
90、hPdMaI7F4C0z)w&s!pXmUjRfOcL9H6E2B+y(u%r#oWlThQeNbJ8G5Dw&t!pYmUjRgOcL9I6E3B+y(v%r#oXlTiQeNbK8G5D2A-x*t$qZnVkShPdMaI7F4C0z)w&s!pXmUjRfOcL9H6E2B+y(u%r#oWlTiQaJ7F4C1z)w&t!pYmUjRgOcL9I6E3B+y(v%r#oXlTiQeNbK8G5D2A-x*t$qZnVkShPdMaI7F4C0z)w&s!pYmUjRfOcL9H6E3B+yqZnWkShPeMaJ7F4C1z)w&t!pYmUjRgOcL9I6E3B+y(v%r#oX
91、lTiQeNbK8G5D2A-x*t$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(qZnWkShPeMaJ7F4C1z)w&t!pYmUjRgOcL9I6E3B+y(v%r#oXlTiQfNbK8G5D2A-x*u$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(u%WkShPeMaJ7F4C1z)w&t!pYmUjRgOcL9I6E3B0y(v%r#oXlTiQfNbK8G5D2A-x*u$qZnVkShPdMaJ7F4C0z)w&s!pYiQfNbK8H5D2A+x*u$qZnWkShPeMaJ7G4C1z)w&t
92、!pYmVjRgOcL9I6E3B0y(v%r#oXlTiQfNbK8G5D2A-x*u$qZnVkSdL9I6F3B0y(v%s#oXlUiQfNbK8H5D2A+x*u$rZnWkShPeMaJ7G4C1z)w&t!pYmVjRgOcL9I6E3B0y(v%r#oXlTibJ7G4C1z-w&t!qYmVjRgOdL9I6F3B0y)v%s#oXlUiQfNcK8H5D2A+x*u$rZnWkShPeMaJ7G4C1z)w&t!pYmVjRcK8H5E2A+x(u$rZnWkThPeMbJ7G4C1z-w&t!qYmVjSgOdL9I6F3B0y)v%s#oXlUiQfNcK8H5D2A+
93、x*u$rZnWkShPeMaJ7G4C1z)w&t!pYmVjRgOc5E2A+x(u$rZoWkThPeMbJ7G4D1z-w&t!qYmVjSgOdL9I6F3B0y)v%s#oXlUiQfNcK8H5D2A+x*u$rZnWkSdLaI6F3C0y)v%s#pXlUiRfNcK9H5E2A+x(u$rZoWkThPeMbJ7G4D1z-w&t!qYmVjSgOdL9I6F3B0y)v%skThQeMbJ8G4D1z-w*t!qYnVjSgOdLaI6F3C0y)v&s#pXlUiRfNcK9H5E2A+x(u$rZoWkThPeMbJ7G4D1v&s#pXmUiRfOcK9H5E2B+x(u%rZoWkThQeMbJ8G4D1A-w*t!qYnVjSgPdLaI6F3C0y)v&s#pXlUiRfJ8G5D1A-w*t$qYnVkSgPd37文本与字体