边框窗口、和视-文本、字体、图形输出.ppt
《边框窗口、和视-文本、字体、图形输出.ppt》由会员分享,可在线阅读,更多相关《边框窗口、和视-文本、字体、图形输出.ppt(71页珍藏版)》请在三一办公上搜索。
1、,4.1.1 基本的文本输出 基本的文本或图形的输出要通过DC设备环境进行。VC中CDC类是定义设备环境的基类,它封装了170多个成员函数,包括文本输出函数和绘图函数。另外CDC还派生了CClientDC、CWindowDC、CPaintDC、CMetaFileDC等类,以满足不同的用途需要。,4.1 文本输出,输出文本或绘图三个步骤CDC在一个定义的函数中输出文本或绘图三个步骤:1、调用文本输出或绘图函数之前,先获取设备环境对象;常用函数:CWnd:GetDC()格式:CDC*GetDC();功能:获取当前窗口的设备环境对象的指针。典型用法:CDC*pDC=GetDC();/获取当前窗口的设
2、备环境对象指针。注:OnDraw函数忽略此步,因为它已由AppWizard自动生成了这个部分,并把对象地址传递给了该函数的pDC对象指针形参。,2、调用文本输出或绘图函数时,要正确地引用设备环境;如要在客户区的(100,100)位置输出字符串“马到成功!”的典型代码如下:pDC-TextOut(100,100,”马到成功!”);常用的文本输出函数:CDC:TextOut格式:virtual BOOL TextOut(int x,int y,LPCTSTR lpszString,int nCount);BOOL TextOut(int x,int y,const CString 功能:用所选字体
3、在指定位置输出字符串,原点在字符单元左上角。返回:若函数调用成功,返回真,否则返回假。,3、释放设备环境常用函数:CWnd:ReleaseDC()格式:int ReleaseDC(CDC*pDC);功能:释放设备环境。返回:若调用成功,则返回非0,否则返回0。参数:pDC-指向要释放的设备环境对象 设备环境使用完毕立即释放是一个良好的编程习惯,首先因为CDC类对象占用庞大的内存;其次在同一时刻Windows中最多可以有5个显示设备环境可用,所有的应用程序不得不共享这一宝贵资源。在另一个函数中输出文本或绘图同样要遵循以上三步。,4.1.2 设置文本颜色及背景颜色 1、设置文本颜色文本颜色是指输出
4、字体的颜色。VC定义了表示颜色的数据类型COLORREF。可以通过调用RGB宏命令,对其参数赋值来获得不同的颜色。CDC:SetTextColor成员函数用于设置文本本身的颜色,该函数说明如下:格式:virtual COLORREF SetTextColor(COLORREF crColor);功能:设置当前文本颜色。返回:先前文本的RGB颜色值。参数:crColor-指定当前文本的RGB颜色值,SetTextColor使用举例:用MFC AppWizard(exe)工程创建一SDI MFC Windows应用程序。要求-当在客户区单击MOUSE时,用黄色在(100,100)处显示“马到成功!
5、”字符串。程序片断如下:/CDC*pDC=GetDC();/获取当前窗口设备环境的指针 CString str=马到成功!;COLORREF rColor,oColor;rColor=RGB(255,255,0);/黄色 oColor=pDC-SetTextColor(rColor);/保存原来的文本颜色,并当前文本设置为黄色 pDC-TextOut(100,100,str);/显示文本 pDC-SetTextColor(oColor);/恢复原来的文本颜色 ReleaseDC(pDC);/释放设备环境/本例完整程序见CH4D工程。,2、设置文本背景颜色文本在屏幕上输出要占据一定的区域,这个区
6、域用包含文本的矩形区域来定义。在这个区域内除去文本本身的笔划占据的部分以外的其它空隙部分就是文本的背景。文本背景颜色是指用来填充文本输出区域内空隙部分的颜色。文本背景模式是指文本背景颜色填充文本背景的方式。CDC:SetBkColor成员函数用于设置文本的背景颜色,该函数说明如下:格式:virtual COLORREF SetBkColor(COLORREF crColor);功能:设置当前文本背景颜色。返回:先前文本的背景颜色值。参数:crColor-指定当前文本背景颜色值,CDC:SetBkMode成员函数用于设置文本背景模式,该函数说明如下:格式:int SetBkMode(int nB
7、kMode);功能:设置当前背景模式。返回:先前的背景模式。参数:nBkMode-指定当前的背景模式 它有两个取值:OPAQUE-不透明(缺省时为该值)显示时,背景用当前背景色TRANSPARENT-透明 显示时,不改变背景色(调用SetBkColor函数无效),SetBkColor使用举例:用MFC AppWizard(exe)工程创建一SDI MFC Windows应用程序。要求-当在客户区单击MOUSE时,用黄色在(100,100)处显示“马到成功!”字符串,字符串背景用红色显示。程序片断如下:/CDC*pDC=GetDC();CString str=马到成功!;int nBkMode;
8、COLORREF rColor,oColor;rColor=RGB(255,255,0);/黄色oColor=pDC-SetTextColor(rColor);nBkMode=pDC-SetBkMode(OPAQUE);/保存原来的背景模式,并且当前背景设置为不透明,pDC-SetBkColor(RGB(255,0,0);/设置当前背景颜色为红色 pDC-TextOut(100,100,str);/显示文本 pDC-SetTextColor(oColor);/恢复原来的文本颜色 pDC-SetBkMode(nBkMode);/恢复原来的背景模式 ReleaseDC(pDC);/释放设备环境,4
9、.2.1 字体的基本知识 一、关于字体的术语1、字模(typeface):指基本的字符设计,它由笔划宽度(stroke width)及衬线(serif)决定。注:衬线(印serif)指主笔划结尾时的细线,如字母“H”的上下四条短而细的横线。有些字体不带衬线(sans serif)。sans-prep.无。2、字体(font):具有相同字模和尺寸的完整字符集。字体尺寸用来指定字符所占区域的大小,可以用mm、inch或“点”来衡量。点是印刷中采用的最小度量单位(1英寸=72dots=25.4mm)。,4.2 字体,目前有四种基本类型的字体:光栅字体/点阵字体(raster font)每个字符均以固
10、定图形形式存储在字库中,它是与设备相关的字体。矢量字体/向量字体(Vector font)是把字符分解为一系列直线段而存储起来。TrueType字体 字符的原型是一系列直线和曲线绘制命令的集合。它是一种所见即所得的字体。OpenType字体 它不但可以定义TrueType字体,还可以定义手写字体。矢量字体、TrueType字体、OpenType字体是与设备无关的字体。,3、字体属性:有许多属性,主要有字样、风格和尺寸三种。字样是字符书写和显示时表现出的特定模式,如汉字有宋体、楷体、仿宋、黑体、隶书、幼圆等多种字样。字体风格主要表现字体的粗细和是否倾斜等特点。字体尺寸用来指定字符所占区域的大小,
11、可以用mm、inch或“点”来衡量。对于汉字,还用“号”数表示字体的尺寸,字号越大,字体尺寸越小(如:五号字的尺寸比四号字的尺寸要小)。二、TEXTMETRIC结构Windows很多字体的功能都是以TEXTMETRIC结构定义的,该结构定义中的成员可以较准确地描述字体的各种属性。如果需要更精确地对字体高度和宽度进行计算就需要使用CDC:GetTextMetrics(LPTEXTMETRIC lpMetrics)成员函数,该函数将会填充TEXTMETRIC结构。,TEXTMETRIC结构定义:typedef struct tagTEXTMETRIC short int tmHeight;/高度
12、short int tmAscent;/上升高度 short int tmDescent;/下降高度 short int tmInternalLeading;/字符单元内部插入 short int tmExternalLeading;/字符单元外部插入 short int tmAveCharWidth;/平均字符宽度 short int tmMaxCharWidth;/最大字符宽度 short int tmWeight;/字体权重 short int tmOverhang;/延伸量 short int tmDigitizedAspectX;/设备水平特性 short int tmDigitiz
13、edAspectY;/设备垂直特性,BYTE tmFirstChar;/第一个字符 BYTE tmLastChar;/最后一个字符 BYTE tmDefaultChar;/缺省字符 BYTE tmBreakChar;/中断字符 BYTE tmItalic;/斜体 BYTE tmUnderlined;/下划线 BYTE tmStruckOut;/删除线 BYTE tmPitchAndFamily;/字体间距和字体类型 BYTE tmCharSet;/字符集TEXTMETRIC;该结构常用成员有:tmHeight、tmAscent、tmDescent、tmInternalLeading、tmExt
14、ernalLeading、tmAveCharWidth等。,逻辑字体/自定义字体程序员可以的创建的字体有两种:库存字体(标准字体)和逻辑字体(自定义字体/非库存字体)。逻辑字体是对理想字体的一种描述方式。使用逻辑字体输出文字时,系统自动地将逻辑字体映射为最匹配的系统库存字体。用户可使用CFont:CreateFont或LOGFONT/CFont:CreateFontIndirect创建逻辑字体。CFont类继承关系如下:CObject CGdiObject CFont图:CFont类的继承关系CGdiObject图形对象类是各种Windows GDI(图形设备接口类)的基类,Gdi对象类的派生
15、类除了字体外,还包括画笔、画刷、区域、调色板等。CFont(字体类)封装了一组Windows GDI字体,同时提供了一组成员函数处理这些字体。,一、创建逻辑字体的结构和函数1、LOGFONT结构LOGFONT结构typedef struct tagLOGFONTLONG lfHeight;/字体高度,等于零为缺省高度LONG lfWidth;/字体平均宽度LONG lfEscapement;/出口矢量与X轴间的角度(0.1度)LONG lfOrientation;/字符基线与X轴间的角度。LONG lfWeight;/字体粗细BYTE lfItalic;/是否为斜体。BYTE lfUnderl
16、ine;/是否有下划线。BYTE lfStrikeOut;/是否带删除线。BYTE lfCharSet;/指定字符集合BYTE lfOutPrecision;/字符输出精度。,BYTE lfClipPrecision;/裁剪精度BYTE lfQuality;/输出质量BYTE lfPitchAndFamily;/字体间距和字体类型BYTE lfFacename;/指定字体的字样名LOGFONT,2、CFont:CreateFont-创建逻辑字体(法1)格式:BOOL CreateFont(int nHeight,int nWidth,int nEscapement,int nOrientati
17、on,int nWeight,BYTE bItalic,BYTE bUnderline,BYTE cStrikeOut,BYTE nCharSet,BYTE nOutPrecision,BYTE nClipPrecision,BYTE nQuality,BYTE nPitchAndFamily,LPCTSTR lpszFacename);功能:创建并初始化一个CFont对象。返回:调用成功,返回非0值。该函的参数和LOGFONT中的各成员有一一对应的关系。本函数适合于字体有多个属性要进行设定的情况。,3、CFont:CreateFontIndirect-创建逻辑字体(法2)使用时首先定义LOG
18、FONT结构的有关成员创建所需的字体,然后调用CFont:CreateFontIndirect产生该字体。CFont:CreateFontIndirect函数说明如下:格式:BOOL CreateFontIndirect(const LOGFONT*lpLogFont);功能:以lpLogFont指向LOGFONT结构中给出的字体属性初始化一个CFont对象。返回:调用成功,返回非0值。参数:lpLogFont-指向LOGFONT结构的指针。,二、使用逻辑字体1、逻辑字体创建步骤Step 1:用CFont类定义字体对象;Step 2:调用CFont:CreateFont函数(或LOGFONT/
19、CFont:CreateFontIndirect)建立自定义的逻辑字体;Step 3:调用CDC:SelectObject函数将上一步构造的GDI字体对象选入当前设备环境,并保存原来的GDI字体对象;CDC:SelectObject函数使用格式:格式:virtual CFont*SelectObject(CFont*pFont);功能:将一个字体对象选入当前设备环境,新选字体对象将代替同一类型的先前对象。返回:被代替字体对象的指针。参数:pFont-指向要选择的CFont对象的指针。Step 4:字体使用结束后,恢复当前设备环境原来的GDI字体对象。,2、逻辑字体使用举例使用CFont:Cre
20、ateFont创建逻辑字体程序例:程序清单:/CFont MyFont,*OldFont;CString str=马到成功!;pDC-SetTextColor(RGB(0,0,255);MyFont.CreateFont(150,30,200,/字符串倾斜20度 0,FW_HEAVY,TRUE,TRUE,0,GB2312_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DRAFT_QUALITY,FIXED_PITCH,MyFont);/创建逻辑字体OldFont=pDC-SelectObject(/恢复DC中原来的字体,三、使用标准字体任何语种的
21、Windows都支持六种库存字体/标准字体,它们分别是:SYSTEM_FONT(系统字体)、ANSI_FIXED_FONT(固定系统字体)、ANSI_VAR_FONT(可变系统统)、DEVICE_DEFAULT_FONT(与设备相关字体)、OEM_FIXED_FONT(与OEM相关字体)、SYSTEM_FIXED_FONT(固定宽度的系统字体)。用户可直接选用这些标准字体。可以调用CDC:SelectStockObject成员函数选用标准字体对象,该函数使用说明如下:格式:virtual CGdiObject*SelectStockObject(int nIndex);功能:选择预定义的库存字
22、体、画笔或画刷所对应的CGdiObject对象。返回:调用成功则返回指向被替换的CGdiObject对象的指针,否则返回NULL。,参数:nIndex-指定预定义的对象。nIndex取值可以是下列对象之一:SYSTEM_FONT(系统字体)ANSI_FIXED_FONT(固定系统字体)ANSI_VAR_FONT(可变系统统)DEVICE_DEFAULT_FONT(与设备相关字体)OEM_FIXED_FONT(与OEM相关字体)SYSTEM_FIXED_FONT(固定宽度的系统字体)BLACK_PEN(黑色画笔)NULL_PEN(空画笔)WHITE_PEN(白色画笔),BLACK_BRUSH(黑
23、色画刷)DKGRAY_BRUSH(深灰画刷)HOLLOW_BRUSH(中空画刷)LTGRAY_BRUSH(浅灰画刷)NULL_BRUSH(空画刷)WHITE_BRUSH(白色画刷),标准字体使用举例:依次调用六种标准字体显示“The road of success!”。程序片段如下:/int nFonts6=SYSTEM_FONT,ANSI_FIXED_FONT,ANSI_VAR_FONT,DEVICE_DEFAULT_FONT,OEM_FIXED_FONT,SYSTEM_FIXED_FONT;CString str=The road of success!;pDC-SetTextColor(
24、RGB(0,0,255);,for(int i=0;iSelectStockObject(nFontsi);pDC-TextOut(200,40*(i+2),str);,基本图形显示用CDC绘图函数绘制基本图形与前面介绍的用CDC文本函数输出文本的步骤相同(见本章节三步曲)。另外CDC还派生了CPaintDC、CClientDC、CWindowDC等类。一、常用绘图函数CDC:SetPixel格式:COLORREF SetPixel(int x,int y,COLORREF crColor);COLORREF SetPixel(POINT point,COLORREF crColor);功能:
25、设置指定坐标像素为最接近crColor所指定的颜色。返回:若调用成功,返回指定坐标像素的实际RGB值。例:在OnDraw函数中,添加如下语句pDC-SetPixel(50,50,RGB(0,0,255);则点(50,50)被画为兰色。,4.3图形输出,CDC:MoveTo/LineTo格式:CPoint MoveTo(int x,int y);CPoint MoveTo(POINT point);功能:将当前位置移到(x,y)或point参数指定的点。返回:将先前位置(x,y)坐标返回给Cpoint对象。格式:BOOL LineTo(int x,int y);BOOL LineTo(POINT
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 边框 窗口 文本 字体 图形 输出
链接地址:https://www.31ppt.com/p-5847509.html