Visual C++面向对象与可视化程序设计05_vc_text_font课件

上传人:我*** 文档编号:144974424 上传时间:2020-09-15 格式:PPT 页数:36 大小:134KB
返回 下载 相关 举报
Visual C++面向对象与可视化程序设计05_vc_text_font课件_第1页
第1页 / 共36页
Visual C++面向对象与可视化程序设计05_vc_text_font课件_第2页
第2页 / 共36页
Visual C++面向对象与可视化程序设计05_vc_text_font课件_第3页
第3页 / 共36页
Visual C++面向对象与可视化程序设计05_vc_text_font课件_第4页
第4页 / 共36页
Visual C++面向对象与可视化程序设计05_vc_text_font课件_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《Visual C++面向对象与可视化程序设计05_vc_text_font课件》由会员分享,可在线阅读,更多相关《Visual C++面向对象与可视化程序设计05_vc_text_font课件(36页珍藏版)》请在金锄头文库上搜索。

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

2、以外的字体,可以调用函数GreateFont自行创建 HFont=CreateFont (int nHeight, /字体高度,0采用系统缺省值,使用逻辑单位 int nWidth, /字体宽度,取0则由系统根据高宽比取最佳值 int nEscapement, /每行文字相对于页底的角度,单位为0.1度 int nOrienation, /每个文字相对于页底的角度,单位为0.1度 DWORD nWeight, /字体粗细度,范围为01000 DWORD Dwltalic, /如果要求字体倾斜,则取非零 DWORD dwUnderline,/如果要求下划线,则取非零 DWORD dwStrike

3、out,/如果要求中划线,则取非零 DWORD dwCharset, /字体所属字符集 DWORD dwOutputPrecision,/输出精度,一般取缺省值OUT_DEFAULT_PRECIS DWORD dwClipPrecision, /剪裁精度,常取缺省值CLIP_DEFAULT_PRECIS DWORD dwQuality, /输出质量,一般取缺省值DEFAULT_QUALITY DWORD dwPitchAndFamily, /字体名 ),可选的系统字符集: ANSI_CHARSET OEM_CHARSET SYMBOL_CHARSET DEFAULT_CHARSET SHIFT

4、JIS_CHARSET,5,5.1.3 设置字体和背景颜色,crColor为设置的颜色,字体及背景颜色 的设置在开发过 程中非常重要,6,5.2 文本的输出过程,7,获取字体信息,8,系统定义的TEXTMETRICS的结构如下: typedef struct tagTEXTMETRIC /tm LONG tmHeight; /字符高度 LONG tmAscent; /字符基线以上高度 LONG tmDescent; /字符基线以下高度 LONG tmInternalLeading;/tmHeight制订的字符高度顶部的控件 LONG tmExternalLeading;/行与行之间的间隔 LO

5、NG tmAveCharWidth;/平均字符宽度 LONG tmMaxCharWidth;/最大字符宽度 LONG tmWeight; /字符的粗细度 LONG tmOverhang;/合成字体间附加的宽度 LONG tmDigitizedAspectX; /为输出设备设计的X轴尺寸 LONG tmDigitizedAspectY; /为输出设备设计的Y轴尺寸 BCHAR tmFirstChar;/字体中第一个字符值 BCHAR tmLastChar; /字体中最后一个字符值 BCHAR tmDefaultChar; /代替不在字体中字符的字符 BCHAR tmBreakChar;/作为分割

6、符的字符 BYTE tmItalic; /非0则表示字体为斜体 BYTE tmUnderlined; /非0则表示字体有下划线 BYTE tmStruckOut; /非0则表示字符为删除字体 BYTE tmPitchAndFamily; /字体间距和字体族 BYTE tmCharSet; /字符集 TEXTMETRIC,Return,9,格式化文本,(1) 确定后续文本坐标,例如,X轴起始坐标为cx0,后续文本起始坐标cx1为: cx1=cx0+size.cx;,Return,10,(2)确定换行时文本坐标,字符的高度与行间隔均存储在tm指向的TEXTMETRICS结构中,换行时Y轴上文本的起

7、始坐标cy为: cy=tm.tmHeight+tm.tmExternalLeading;,Return,通过计算当前行文本字符的高度与行间隔之和,即可得到换行时文本的起始坐标,11,文本输出,常用的文本输出函数TextOut原型如下: BOOL TextOut ( HDC hdc, int X, int Y, /X, Y为用户区中字符串的起始坐标 LPCTSTR lpstring, /lpstring为显示的字符串 int nCount /nCount为字符串中的字节数 );,TextOut 以坐标X,Y为起点, 输出字节数为 nCount、 名为lpstring中的字符串,12,5.3 文本

8、操作实例,【例4-1】在用户窗口上输出几行字符串,当窗口接收到WM_PAINT消息后,显示的文本每次都被重新刷新。,#include #include #include long WINAPI WndProc( HWND hWnd, UINT iMessage, UINT wParam, LONG lParam ); BOOL InitWindowsClass(HINSTANCE hInstance); BOOL InitWindows(HINSTANCE hInstance,int nCmdShow); HWND hWndMain;,13,/主函数 int WINAPI WinMain( H

9、INSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) MSG Message; if(!InitWindowsClass(hInstance)return FALSE; if(!InitWindows(hInstance,nCmdShow)return FALSE; while(GetMessage( ,14,/消息处理函数 long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam) static long nXChar

10、,nCaps,nYChar; HDC hDC; /定义指向设备上下文的句柄 short x; TEXTMETRIC tm; short LnCount=6; PAINTSTRUCT PtStr; /定义指向包含绘图信息的结构体变量 static char *textbuf= This is the First line, This is the second line, This is the third line, This is the fourth line, This is the fifth line, This is the sixth line ;,输出的文 本内容,15,swi

11、tch(iMessage) /处理消息 case WM_CREATE:/处理窗口创建消息 hDC=GetDC(hWnd) ; /获取当前设备表句柄 GetTextMetrics(hDC, ,16,BOOL InitWindowsClass(HINSTANCE hInstance)/初始化窗口类 WNDCLASS WndClass; ; WndClass.style=CS_HREDRAW|CS_VREDRAW; return RegisterClass( ,BOOL InitWindows(HINSTANCE hInstance,int nCmdShow) /初始化窗口 HWND hWnd; h

12、Wnd=CreateWindow(WinText, /生成窗口 文本显示示例程序, WS_OVERLAPPEDWINDOW, .; NULL); if(!hWnd)return FALSE; hWndMain=hWnd; ShowWindow(hWnd,nCmdShow);/显示窗口 UpdateWindow(hWnd); return TRUE; ,17,【例4-2】本程序通过在窗口中分五行分别显示五行文本,以说明在窗口的用户区中输出文本的方法。,18,本例题的源代码如下: #include #include #include #include LRESULT CALLBACK WndPro

13、c(HWND,UINT,WPARAM,LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow) HWND hwnd; MSG Msg; WNDCLASS wndclass; char lpszClassName = 文本输出; char lpszTitle= EXAMPLE FOR THE TEXT OUTPUT; wndclass.style = 0; ; wndclass.lpszClassName = lpszClassName;,19,if(

14、!RegisterClass( ,20,LRESULT CALLBACK WndProc(HWND hwnd,UINT message, WPARAM wParam,LPARAM lParam) HDC hdc; HFONT hF_black,hF_big;/定义两种字体句柄 PAINTSTRUCT ps; TEXTMETRIC tm;/定义一个TEXTMETRIC结构,用以记录字体信息 char lpsz_1=这是一行红色的、字体为SYSTEM_FONT的文字,红色代表未来。; char lpsz_2=现在显示的是自定义字体,颜色为绿色,绿色代表生机勃勃。; char lpsz_3=现在展现

15、在您面前的是蓝色的粗体字,蓝色代表广阔的海洋和天空。; char lpsz_4=当前字体为大号、斜体并带有下划线的文字。; char lpsz_5=现在您掌握了字体的操作了吗?; char lpsz_6=祝您成功!; int X=0,Y=0; SIZE size;/定义一个SIZE类型的结构,21,switch(message) case WM_PAINT: hdc=BeginPaint(hwnd, /字体名称,22,SetTextColor(hdc,RGB(0,255,0);/设置文本颜色为绿色 SelectObject(hdc,hF_black);/将自定义字体选入设备环境 GetText

16、Metrics(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);/

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

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

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