边框窗口、和视-文本、字体、图形输出.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
2、=GetDC();/获取当前窗口的设备环境对象指针。注:OnDraw函数忽略此步,因为它已由AppWizard自动生成了这个部分,并把对象地址传递给了该函数的pDC对象指针形参。2、调用文本输出或绘图函数时,要正确地引用设备环境;如要在客户区的(100,100)位置输出字符串“马到成功!”的典型代码如下:pDC-TextOut(100,100,”马到成功!”);常用的文本输出函数:CDC:TextOut格式:virtualBOOLTextOut(intx,inty,LPCTSTRlpszString,intnCount);BOOLTextOut(intx,inty,constCString&s
3、tr);功能:用所选字体在指定位置输出字符串,原点在字符单元左上角。返回:若函数调用成功,返回真,否则返回假。3、释放设备环境常用函数:CWnd:ReleaseDC()格式:intReleaseDC(CDC*pDC);功能:释放设备环境。返回:若调用成功,则返回非0,否则返回0。参数:pDC-指向要释放的设备环境对象设备环境使用完毕立即释放是一个良好的编程习惯,首先因为CDC类对象占用庞大的内存;其次在同一时刻Windows中最多可以有5个显示设备环境可用,所有的应用程序不得不共享这一宝贵资源。在另一个函数中输出文本或绘图同样要遵循以上三步。4.1.2 设置文本颜色及背景颜色设置文本颜色及背景
4、颜色 1、设置文本颜色设置文本颜色文本颜色是指输出字体的颜色。VC定义了表示颜色的数据类型COLORREF。可以通过调用RGB宏命令,对其参数赋值来获得不同的颜色。CDC:SetTextColor成员函数用于设置文本本身的颜色,该函数说明如下:格式:virtualCOLORREFSetTextColor(COLORREFcrColor);功能:设置当前文本颜色。返回:先前文本的RGB颜色值。参数:crColor-指定当前文本的RGB颜色值SetTextColor使用举例举例:用MFCAppWizard(exe)工程创建一SDIMFCWindows应用程序。要求-当在客户区单击MOUSE时,用黄
5、色在(100,100)处显示“马到成功!”字符串。程序片断如下:/CDC*pDC=GetDC();/获取当前窗口设备环境的指针CStringstr=马到成功!;COLORREFrColor,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成员函数用于设置文本的背景颜色,该函数说明如下:格式:virtualCOLORREFSetBkColor(COLORREFcrColor);功能:设置当前文本背景颜色。返回:先前文本的背景颜色值。参数:crColor-指定当前文本背景颜色值CDC:SetBkMode成员函数用于设置文本背景模式,该函数说明如下:格式:intS
7、etBkMode(intnBkMode);功能:设置当前背景模式。返回:先前的背景模式。参数:nBkMode-指定当前的背景模式它有两个取值:OPAQUE-不透明(缺省时为该值)显示时,背景用当前背景色TRANSPARENT-透明显示时,不改变背景色(调用SetBkColor函数无效)SetBkColor使用举例举例:用MFCAppWizard(exe)工程创建一SDIMFCWindows应用程序。要求-当在客户区单击MOUSE时,用黄色在(100,100)处显示“马到成功!”字符串,字符串背景用红色显示。程序片断如下:/CDC*pDC=GetDC();CStringstr=马到成功!;int
8、 nBkMode;COLORREFrColor,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);/释放设备
9、环境4.2.1 字体的基本知识字体的基本知识 一、关于字体的术语一、关于字体的术语1、字字模模(typeface):指基本的字符设计,它由笔划宽度(strokewidth)及衬线(serif)决定。注:衬线(印serif)指主笔划结尾时的细线,如字母“H”的上下四条短而细的横线。有些字体不带衬线(sansserif)。sans-prep.无。2、字体字体(font):具有相同字模和尺寸的完整字符集。字体尺寸用来指定字符所占区域的大小,可以用mm、inch或“点”来衡量。点是印刷中采用的最小度量单位(1英寸)。4.2 字体字体目前有四种基本类型的字体四种基本类型的字体:光栅字体/点阵字体(ras
10、terfont)每个字符均以固定图形形式存储在字库中,它是与设备相关的字体。矢量字体/向量字体(Vectorfont)是把字符分解为一系列直线段而存储起来。TrueType字体字符的原型是一系列直线和曲线绘制命令的集合。它是一种所见即所得的字体。OpenType字体它不但可以定义TrueType字体,还可以定义手写字体。矢量字体、TrueType字体、OpenType字体是与设备无关的字体。3、字体属性:字体属性:有许多属性,主要有字样、风格和尺寸三种。字样是字符书写和显示时表现出的特定模式,如汉字有宋体、楷体、仿宋、黑体、隶书、幼圆等多种字样。字体风格主要表现字体的粗细和是否倾斜等特点。字体
11、尺寸用来指定字符所占区域的大小,可以用mm、inch或“点”来衡量。对于汉字,还用“号”数表示字体的尺寸,字号越大,字体尺寸越小(如:五号字的尺寸比四号字的尺寸要小)。二、二、TEXTMETRIC结构结构Windows很多字体的功能都是以TEXTMETRIC结构定义的,该结构定义中的成员可以较准确地描述字体的各种属性。如 果 需 要 更 精 确 地 对 字 体 高 度 和 宽 度 进 行 计 算 就 需 要 使 用 CDC:GetTextMetrics(LPTEXTMETRIC lpMetrics)成 员 函 数,该 函 数 将 会 填 充TEXTMETRIC结构。TEXTMETRIC结构定义
12、:typedefstructtagTEXTMETRICshortinttmHeight;/高度shortinttmAscent;/上升高度shortinttmDescent;/下降高度shortinttmInternalLeading;/字符单元内部插入shortinttmExternalLeading;/字符单元外部插入shortinttmAveCharWidth;/平均字符宽度shortinttmMaxCharWidth;/最大字符宽度shortinttmWeight;/字体权重shortinttmOverhang;/延伸量shortinttmDigitizedAspectX;/设备水平特
13、性shortinttmDigitizedAspectY;/设备垂直特性BYTEtmFirstChar;/第一个字符BYTEtmLastChar;/最后一个字符BYTEtmDefaultChar;/缺省字符BYTEtmBreakChar;/中断字符BYTEtmItalic;/斜体BYTEtmUnderlined;/下划线BYTEtmStruckOut;/删除线BYTEtmPitchAndFamily;/字体间距和字体类型BYTEtmCharSet;/字符集TEXTMETRIC;该 结 构 常 用 成 员 有:tmHeight、tmAscent、tmDescent、tmInternalLeadin
14、g、tmExternalLeading、tmAveCharWidth等。逻辑字体逻辑字体/自定义字体自定义字体程序员可以的创建的字体有两种:库库存存字字体体(标标准准字字体体)和逻辑字体(自定义字体/非库存字体)。逻逻辑辑字字体体是对理想字体的一种描述方式。使用逻辑字体输出文字时,系统自动地将逻辑字体映射为最匹配的系统库存字体。用户可使用CFont:CreateFont或LOGFONT/CFont:CreateFontIndirect创建逻辑字体。CFont类继承关系如下:CObject CGdiObject CFont图:CFont类的继承关系CGdiObject图形对象类是各种Window
15、sGDI(图形设备接口类)的基类,Gdi对象类的派生类除了字体外,还包括画笔、画刷、区域、调色板等。CFont(字体类)封装了一组WindowsGDI字体,同时提供了一组成员函数处理这些字体。一、创建逻辑字体的结构和函数一、创建逻辑字体的结构和函数1、LOGFONT结构结构LOGFONT结构typedefstructtagLOGFONTLONG lfHeight;/字体高度,等于零为缺省高度LONGlfWidth;/字体平均宽度LONGlfEscapement;/出口矢量与X轴间的角度度)LONGlfOrientation;/字符基线与X轴间的角度。LONGlfWeight;/字体粗细BYTE
16、 lfItalic;/是否为斜体。BYTElfUnderline;/是否有下划线。BYTElfStrikeOut;/是否带删除线。BYTElfCharSet;/指定字符集合BYTElfOutPrecision;/字符输出精度。BYTElfClipPrecision;/裁剪精度BYTElfQuality;/输出质量BYTElfPitchAndFamily;/字体间距和字体类型BYTElfFacename;/指定字体的字样名LOGFONT2、CFont:CreateFont-创建逻辑字体(法法1)格式:BOOLCreateFont(intnHeight,intnWidth,intnEscapeme
17、nt,intnOrientation,int nWeight,BYTE bItalic,BYTE bUnderline,BYTEcStrikeOut,BYTEnCharSet,BYTEnOutPrecision,BYTEnClipPrecision,BYTE nQuality,BYTE nPitchAndFamily,LPCTSTRlpszFacename);功能:创建并初始化一个CFont对象。返回:调用成功,返回非0值。该函的参数和LOGFONT中的各成员有一一对应的关系。本函数适合于字体有多个属性要进行设定的情况。3、CFont:CreateFontIndirect-创建逻辑字体(法法2
18、)使用时首先定义LOGFONT结构的有关成员创建所需的字体,然后调用CFont:CreateFontIndirect产生该字体。CFont:CreateFontIndirect函数说明如下:格式:BOOLCreateFontIndirect(constLOGFONT*lpLogFont);功能:以lpLogFont指向LOGFONT结构中给出的字体属性初始化一个CFont对象。返回:调用成功,返回非0值。参数:lpLogFont-指向LOGFONT结构的指针。二、使用逻辑字体二、使用逻辑字体1、逻辑字体创建步骤、逻辑字体创建步骤Step1:用CFont类定义字体对象;Step2:调 用 CFo
19、nt:CreateFont函 数(或或 LOGFONT/CFont:CreateFontIndirect)建立自定义的逻辑字体;Step3:调用CDC:SelectObject函数将上一步构造的GDI字体对象选入当前设备环境,并保存原来的GDI字体对象;CDC:SelectObject函数使用格式:格式:virtualCFont*SelectObject(CFont*pFont);功能:将一个字体对象选入当前设备环境,新选字体对象将代替同一类型的先前对象。返回:被代替字体对象的指针。参数:pFont-指向要选择的CFont对象的指针。Step4:字体使用结束后,恢复当前设备环境原来的GDI字体
20、对象。2、逻辑字体使用举例、逻辑字体使用举例使用CFont:CreateFont创建逻辑字体程序例程序例:程序清单:/CFontMyFont,*OldFont;CStringstr=马到成功!;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-Selec
21、tObject(&MyFont);/将创建的逻辑字体选入当前DC,保存原来的字体pDC-TextOut(0,150,str);pDC-SelectObject(OldFont);/恢复DC中原来的字体三、使用标准字体三、使用标准字体任何语种的Windows都支持六种库存字体/标准字体,它们分别是:SYSTEM_FONT(系统字体)、ANSI_FIXED_FONT(固定系统字体)、ANSI_VAR_FONT(可变系统统)、DEVICE_DEFAULT_FONT(与设备相 关 字 体)、OEM_FIXED_FONT(与 OEM相 关 字 体)、SYSTEM_FIXED_FONT(固定宽度的系统字体
22、)。用户可直接选用这些标准字体。可以调用CDC:SelectStockObject成员函数选用标准字体对象,该函数使用说明如下:格式:virtualCGdiObject*SelectStockObject(intnIndex);功能:选择预定义的库存字体、画笔或画刷所对应的CGdiObject对象。返回:调用成功则返回指向被替换的CGdiObject对象的指针,否则返回NULL。参数:nIndex-指定预定义的对象。nIndex取值可以是下列对象之一:SYSTEM_FONT(系统字体)ANSI_FIXED_FONT(固定系统字体)ANSI_VAR_FONT(可变系统统)DEVICE_DEFAU
23、LT_FONT(与设备相关字体)OEM_FIXED_FONT(与OEM相关字体)SYSTEM_FIXED_FONT(固定宽度的系统字体)BLACK_PEN(黑色画笔)NULL_PEN(空画笔)WHITE_PEN(白色画笔)BLACK_BRUSH(黑色画刷)DKGRAY_BRUSH(深灰画刷)HOLLOW_BRUSH(中空画刷)LTGRAY_BRUSH(浅灰画刷)NULL_BRUSH(空画刷)WHITE_BRUSH(白色画刷)标准字体使用举举例例:依次调用六种标准字体显示“The road ofsuccess!”。程序片段如下:/intnFonts6=SYSTEM_FONT,ANSI_FIXED
24、_FONT,ANSI_VAR_FONT,DEVICE_DEFAULT_FONT,OEM_FIXED_FONT,SYSTEM_FIXED_FONT;CStringstr=Theroadofsuccess!;pDC-SetTextColor(RGB(0,0,255);for(inti=0;iSelectStockObject(nFontsi);pDC-TextOut(200,40*(i+2),str);基本图形显示基本图形显示用用CDC绘图函数绘制基本图形与前面介绍的用CDC文本函数输出文本的步骤相同(见本章节三步曲)。另外CDC还派生了CPaintDC、CClientDC、CWindowDC等类
25、。一、常用绘图函数一、常用绘图函数CDC:SetPixel格式:COLORREFSetPixel(intx,inty,COLORREFcrColor);COLORREFSetPixel(POINTpoint,COLORREFcrColor);功能:设置指定坐标像素为最接近crColor所指定的颜色。返回:若调用成功,返回指定坐标像素的实际RGB值。例:在OnDraw函数中,添加如下语句pDC-SetPixel(50,50,RGB(0,0,255);则点(50,50)被画为兰色。图形输出图形输出CDC:MoveTo/LineTo格式:CPointMoveTo(intx,inty);CPointM
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 边框 窗口 文本 字体 图形 输出
限制150内