第5讲文本与字体说课材料

上传人:youn****329 文档编号:136944093 上传时间:2020-07-04 格式:PPT 页数:36 大小:284KB
返回 下载 相关 举报
第5讲文本与字体说课材料_第1页
第1页 / 共36页
第5讲文本与字体说课材料_第2页
第2页 / 共36页
第5讲文本与字体说课材料_第3页
第3页 / 共36页
第5讲文本与字体说课材料_第4页
第4页 / 共36页
第5讲文本与字体说课材料_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《第5讲文本与字体说课材料》由会员分享,可在线阅读,更多相关《第5讲文本与字体说课材料(36页珍藏版)》请在金锄头文库上搜索。

1、1,第5讲文本与字体,使用定义好的与设备无关的字体集,Windows就能维护它的设备无关性,提供“所见即所得”的好处,即屏幕所见与设备输出的文本是一样的,2,5.1设置文本的设备环境,Win系统提供了七种基本字体,3,(1)定义字体句柄变量:HFONThF;/hF为字体的句柄,(2)调函数GetStockObject获得系统字体句柄它返回的是系统的缺省字体hF=GetStockObject():,(3)调用函数SelectObject将字体选入设备环境SelectObject(hdc,hF);,选择系统字体的步骤,4,5.1.2创建自定义字体,若需要定义系统以外的字体,可以调用函数Greate

2、Font自行创建HFont=CreateFont(intnHeight,/字体高度,0采用系统缺省值,使用逻辑单位intnWidth,/字体宽度,取0则由系统根据高宽比取最佳值intnEscapement,/每行文字相对于页底的角度,单位为0.1度intnOrienation,/每个文字相对于页底的角度,单位为0.1度DWORDnWeight,/字体粗细度,范围为01000DWORDDwltalic,/如果要求字体倾斜,则取非零DWORDdwUnderline,/如果要求下划线,则取非零DWORDdwStrikeout,/如果要求中划线,则取非零DWORDdwCharset,/字体所属字符集D

3、WORDdwOutputPrecision,/输出精度,一般取缺省值OUT_DEFAULT_PRECISDWORDdwClipPrecision,/剪裁精度,常取缺省值CLIP_DEFAULT_PRECISDWORDdwQuality,/输出质量,一般取缺省值DEFAULT_QUALITYDWORDdwPitchAndFamily,/字体名),可选的系统字符集:ANSI_CHARSETOEM_CHARSETSYMBOL_CHARSETDEFAULT_CHARSETSHIFTJIS_CHARSET,6,5.2文本的输出过程,7,获取字体信息,8,系统定义的TEXTMETRICS的结构如下:typ

4、edefstructtagTEXTMETRIC/tmLONGtmHeight;/字符高度LONGtmAscent;/字符基线以上高度LONGtmDescent;/字符基线以下高度LONGtmInternalLeading;/tmHeight制订的字符高度顶部的控件LONGtmExternalLeading;/行与行之间的间隔LONGtmAveCharWidth;/平均字符宽度LONGtmMaxCharWidth;/最大字符宽度LONGtmWeight;/字符的粗细度LONGtmOverhang;/合成字体间附加的宽度LONGtmDigitizedAspectX;/为输出设备设计的X轴尺寸LON

5、GtmDigitizedAspectY;/为输出设备设计的Y轴尺寸BCHARtmFirstChar;/字体中第一个字符值BCHARtmLastChar;/字体中最后一个字符值BCHARtmDefaultChar;/代替不在字体中字符的字符BCHARtmBreakChar;/作为分割符的字符BYTEtmItalic;/非0则表示字体为斜体BYTEtmUnderlined;/非0则表示字体有下划线BYTEtmStruckOut;/非0则表示字符为删除字体BYTEtmPitchAndFamily;/字体间距和字体族BYTEtmCharSet;/字符集TEXTMETRIC,Return,9,格式化文本

6、,(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

7、,/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

8、(HINSTANCEhInstance,intnCmdShow);,13,/主函数intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow)MSGMessage;if(!InitWindowsClass(hInstance)returnFALSE;if(!InitWindows(hInstance,nCmdShow)returnFALSE;while(GetMessage(,14,/消息处理函数longWINAPIWndProc(HWNDhWnd,UINTiMessage,UINT

9、wParam,LONGlParam)staticlongnXChar,nYChar;HDChDC;/定义指向设备上下文的句柄shortx;TEXTMETRICtm;shortLnCount=6;PAINTSTRUCTPtStr;/定义指向包含绘图信息的结构体变量staticchar*textbuf=ThisistheFirstline,Thisisthesecondline,Thisisthethirdline,Thisisthefourthline,Thisisthefifthline,Thisisthesixthline;,输出的文本内容,15,switch(iMessage)/处理消息c

10、aseWM_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_OVE

11、RLAPPEDWINDOW,.;NULL);if(!hWnd)returnFALSE;ShowWindow(hWnd,nCmdShow);/显示窗口UpdateWindow(hWnd);returnTRUE;,17,【例5-2】本程序通过在窗口中分五行分别显示五行文本,以说明在窗口的用户区中输出文本的方法。,18,本例题的源代码如下:#include#include#include#includeLRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevIn

12、st,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_

13、big;/定义两种字体句柄PAINTSTRUCTps;TEXTMETRICtm;/定义一个TEXTMETRIC结构,用以记录字体信息charlpsz_1=这是一行红色的、字体为SYSTEM_FONT的文字,红色代表未来。;charlpsz_2=现在显示的是自定义字体,颜色为绿色,绿色代表生机勃勃。;charlpsz_3=现在展现在您面前的是蓝色的粗体字,蓝色代表广阔的海洋和天空。;charlpsz_4=当前字体为大号、斜体并带有下划线的文字。;charlpsz_5=现在您掌握了字体的操作了吗?;charlpsz_6=祝您成功!;intX=0,Y=0;SIZEsize;/定义一个SIZE类型的结

14、构,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

15、_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,

16、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

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号