c++程序设计chapter5概要

上传人:今*** 文档编号:110243924 上传时间:2019-10-29 格式:PPT 页数:37 大小:310KB
返回 下载 相关 举报
c++程序设计chapter5概要_第1页
第1页 / 共37页
c++程序设计chapter5概要_第2页
第2页 / 共37页
c++程序设计chapter5概要_第3页
第3页 / 共37页
c++程序设计chapter5概要_第4页
第4页 / 共37页
c++程序设计chapter5概要_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《c++程序设计chapter5概要》由会员分享,可在线阅读,更多相关《c++程序设计chapter5概要(37页珍藏版)》请在金锄头文库上搜索。

1、1,第5章 文本与字体,使用定义好的与设备无关的字体集, 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 dwStrik

3、eout, /如果要求中划线,则取非零 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 GB2

4、312_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; /行与行之间的间隔

5、LONG 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,图示主要参数含义:,10,格式化文本,(1) 确定后续文本坐标,例如,X轴起始坐标为cx0,后续文本起始坐标cx1为: cx1=cx0+size.cx;,Return,11,(2)确定换行时文本坐标,字符的高度与行间隔均存储在tm指向的TEXTM

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

8、tring中的字符串,13,5.3 文本操作实例,【例5-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;,14,/主函数 i

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

10、m) static long nXChar,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

11、the sixth line“ ;,输出的文 本内容,16,switch(iMessage) /处理消息 case WM_CREATE: /处理窗口创建消息 hDC=GetDC(hWnd) ; /获取当前设备表句柄 GetTextMetrics(hDC, ,17,BOOL InitWindowsClass(HINSTANCE hInstance) /初始化窗口类 WNDCLASS WndClass; ; WndClass.style=CS_HREDRAW|CS_VREDRAW; return RegisterClass( ,BOOL InitWindows(HINSTANCE hInstanc

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

13、#include #include LRESULT CALLBACK WndProc(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; ; wn

14、dclass.lpszClassName = lpszClassName;,20,if( !RegisterClass( ,21,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

15、_2=现在显示的是自定义字体,颜色为绿色,绿色代表生机勃勃。“; char lpsz_3=现在展现在您面前的是蓝色的粗体字,蓝色代表广阔的海洋和天空。“; char lpsz_4=“当前字体为大号、斜体并带有下划线的文字。“; char lpsz_5=“现在您掌握了字体的操作了吗?“; char lpsz_6=“祝您成功!“; int X=0,Y=0; SIZE size; /定义一个SIZE类型的结构,22,switch(message) case WM_PAINT: hdc=BeginPaint(hwnd, /字体名称,23,SetTextColor(hdc,RGB(0,255,0); /

16、设置文本颜色为绿色 SelectObject(hdc,hF_black); /将自定义字体选入设备环境 GetTextMetrics(hdc,24,hF_big=CreateFont /引入新字体 ( 30, /字体高度 0, 0, 0, FW_NORMAL, 1, /定义斜体 1, /定义输出时带下划线 0, GB2312_CHARSET, /所使用的字符集 OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH|FF_DONTCARE, “大号字“ );,25,SelectObject(hdc,hF_big);/将自定义字体选入设备环境 SetTextCo

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

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

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