第4讲边框窗口、与视文本、字体、图形输出课件.ppt

上传人(卖家):晟晟文业 文档编号:3861254 上传时间:2022-10-19 格式:PPT 页数:71 大小:220.76KB
下载 相关 举报
第4讲边框窗口、与视文本、字体、图形输出课件.ppt_第1页
第1页 / 共71页
第4讲边框窗口、与视文本、字体、图形输出课件.ppt_第2页
第2页 / 共71页
第4讲边框窗口、与视文本、字体、图形输出课件.ppt_第3页
第3页 / 共71页
第4讲边框窗口、与视文本、字体、图形输出课件.ppt_第4页
第4页 / 共71页
第4讲边框窗口、与视文本、字体、图形输出课件.ppt_第5页
第5页 / 共71页
点击查看更多>>
资源描述

1、4.1.1 基本的文本输出基本的文本输出 基本的文本或图形的输出要通过DC设备环境进行。VC中CDC类是定义设备环境的基类,它封装了170多个成员函数,包括文本输出函数和绘图函数。另外CDC还派生了CClientDC、CWindowDC、CPaintDC、CMetaFileDC等类,以满足不同的用途需要。CDC在一个定义的函数中输出文本或绘图三个步骤:1、调用文本输出或绘图函数之前,先获取设备环境对象;常用函数:CWnd:GetDC()格式:CDC *GetDC();功能:获取当前窗口的设备环境对象的指针。典型用法:CDC*pDC=GetDC();/获取当前窗口的设备环境对象指针。注:OnDr

2、aw函数忽略此步,因为它已由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&str);功能:用所选字体在指定位置输出字符串

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 Set

7、BkMode(int nBkMode);功能:设置当前背景模式。返回:先前的背景模式。参数:nBkMode-指定当前的背景模式 它有两个取值:OPAQUE-不透明(缺省时为该值)显示时,背景用当前背景色TRANSPARENT-透明 显示时,不改变背景色(调用SetBkColor函数无效)SetBkColor使用举例举例:用MFC AppWizard(exe)工程创建一SDI MFC Windows应用程序。要求-当在客户区单击MOUSE时,用黄色在(100,100)处显示“马到成功!”字符串,字符串背景用红色显示。程序片断如下:/CDC*pDC=GetDC();CString str=马到成功

8、!;int nBkMode;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(

9、pDC);/释放设备环境 4.2.1 字体的基本知识字体的基本知识 一、关于字体的术语一、关于字体的术语1、字模字模(typeface):指基本的字符设计,它由笔划宽度(stroke width)及衬线(serif)决定。注:衬线(印serif)指主笔划结尾时的细线,如字母“H”的上下四条短而细的横线。有些字体不带衬线(sans serif)。sans-prep.无。2、字体字体(font):具有相同字模和尺寸的完整字符集。字体尺寸用来指定字符所占区域的大小,可以用mm、inch或“点”来 衡 量。点 是 印 刷 中 采 用 的 最 小 度 量 单 位(1 英 寸=72dots=25.4mm)

10、。目前有四种基本类型的字体四种基本类型的字体:光栅字体/点阵字体(raster font)每个字符均以固定图形形式存储在字库中,它是与设备相关的字体。矢量字体/向量字体(Vector font)是把字符分解为一系列直线段而存储起来。TrueType字体 字符的原型是一系列直线和曲线绘制命令的集合。它是一种所见即所得的字体。OpenType字体 它不但可以定义TrueType字体,还可以定义手写字体。矢量字体、TrueType字体、OpenType字体是与设备无关的字体。3、字体属性:字体属性:有许多属性,主要有字样、风格和尺寸三种。字样是字符书写和显示时表现出的特定模式,如汉字有宋体、楷体、仿

11、宋、黑体、隶书、幼圆等多种字样。字体风格主要表现字体的粗细和是否倾斜等特点。字体尺寸用来指定字符所占区域的大小,可以用mm、inch或“点”来衡量。对于汉字,还用“号”数表示字体的尺寸,字号越大,字体尺寸越小(如:五号字的尺寸比四号字的尺寸要小)。二、二、TEXTMETRIC结构结构Windows很多字体的功能都是以TEXTMETRIC结构定义的,该结构定义中的成员可以较准确地描述字体的各种属性。如果需要更精确地对字体高度和宽度进行计算就需要使用CDC:GetTextMetrics(LPTEXTMETRIC lpMetrics)成员函数,该函数将会填充TEXTMETRIC结构。TEXTMETR

12、IC结构定义:typedef struct tagTEXTMETRIC short int tmHeight;/高度 short int tmAscent;/上升高度 short int tmDescent;/下降高度 short int tmInternalLeading;/字符单元内部插入 short int tmExternalLeading;/字符单元外部插入 short int tmAveCharWidth;/平均字符宽度 short int tmMaxCharWidth;/最大字符宽度 short int tmWeight;/字体权重 short int tmOverhang;/延

13、伸量 short int tmDigitizedAspectX;/设备水平特性 short int tmDigitizedAspectY;/设备垂直特性 BYTE tmFirstChar;/第一个字符 BYTE tmLastChar;/最后一个字符 BYTE tmDefaultChar;/缺省字符 BYTE tmBreakChar;/中断字符 BYTE tmItalic;/斜体 BYTE tmUnderlined;/下划线 BYTE tmStruckOut;/删除线 BYTE tmPitchAndFamily;/字体间距和字体类型 BYTE tmCharSet;/字符集TEXTMETRIC;该

14、结构常用成员有:tmHeight、tmAscent、tmDescent、tmInternalLeading、tmExternalLeading、tmAveCharWidth等。4.2.2逻辑字体逻辑字体/自定义字体自定义字体程序员可以的创建的字体有两种:库存字体库存字体(标准字体标准字体)和逻辑字体(自定义字体/非库存字体)。逻辑字体逻辑字体是对理想字体的一种描述方式。使用逻辑字体输出文字时,系统自动地将逻辑字体映射为最匹配的系统库存字体。用户可使用CFont:CreateFont或LOGFONT/CFont:CreateFontIndirect创建逻辑字体。CFont类继承关系如下:CObj

15、ect CGdiObject CFont图:CFont类的继承关系CGdiObject图形对象类是各种Windows GDI(图形设备接口类)的基类,Gdi对象类的派生类除了字体外,还包括画笔、画刷、区域、调色板等。CFont(字体类)封装了一组Windows GDI字体,同时提供了一组成员函数处理这些字体。一、创建逻辑字体的结构和函数一、创建逻辑字体的结构和函数1、LOGFONT结构结构LOGFONT结构typedef struct tagLOGFONTLONG lfHeight;/字体高度,等于零为缺省高度LONG lfWidth;/字体平均宽度LONG lfEscapement;/出口矢

16、量与X轴间的角度(0.1度)LONG lfOrientation;/字符基线与X轴间的角度。LONG lfWeight;/字体粗细BYTE lfItalic;/是否为斜体。BYTE lfUnderline;/是否有下划线。BYTE lfStrikeOut;/是否带删除线。BYTE lfCharSet;/指定字符集合BYTE lfOutPrecision;/字符输出精度。BYTE lfClipPrecision;/裁剪精度BYTE lfQuality;/输出质量BYTE lfPitchAndFamily;/字体间距和字体类型BYTE lfFacename;/指定字体的字样名LOGFONT2、CF

17、ont:CreateFont-创建逻辑字体(法法1)格式:BOOL CreateFont(int nHeight,int nWidth,int nEscapement,int nOrientation,int nWeight,BYTE bItalic,BYTE bUnderline,BYTE cStrikeOut,BYTE nCharSet,BYTE nOutPrecision,BYTE nClipPrecision,BYTE nQuality,BYTE nPitchAndFamily,LPCTSTR lpszFacename);功能:创建并初始化一个CFont对象。返回:调用成功,返回非0值

18、。该函的参数和LOGFONT中的各成员有一一对应的关系。本函数适合于字体有多个属性要进行设定的情况。3、CFont:CreateFontIndirect-创建逻辑字体(法法2)使用时首先定义LOGFONT结构的有关成员创建所需的字体,然后调用CFont:CreateFontIndirect产生该字体。CFont:CreateFontIndirect函数说明如下:格式:BOOL CreateFontIndirect(const LOGFONT*lpLogFont);功能:以lpLogFont指向LOGFONT结构中给出的字体属性初始化一个CFont对象。返回:调用成功,返回非0值。参数:lpLo

19、gFont-指向LOGFONT结构的指针。二、使用逻辑字体二、使用逻辑字体1、逻辑字体、逻辑字体创建步骤创建步骤Step 1:用CFont类定义字体对象;Step 2:调用CFont:CreateFont函数(或或LOGFONT/CFont:CreateFontIndirect)建立自定义的逻辑字体;Step 3:调用CDC:SelectObject函数将上一步构造的GDI字体对象选入当前设备环境,并保存原来的GDI字体对象;CDC:SelectObject函数使用格式:格式:virtual CFont*SelectObject(CFont*pFont);功能:将一个字体对象选入当前设备环境,

20、新选字体对象将代替同一类型的先前对象。返回:被代替字体对象的指针。参数:pFont-指向要选择的CFont对象的指针。Step 4:字体使用结束后,恢复当前设备环境原来的GDI字体对象。2、逻辑字体使用举例、逻辑字体使用举例使用CFont:CreateFont创建逻辑字体程序例程序例:程序清单:/CFont MyFont,*OldFont;CString str=马到成功!;pDC-SetTextColor(RGB(0,0,255);MyFont.CreateFont(150,/字体高度,等于零为缺省高度30,/字体平均宽度200,/字符串倾斜20度,出口矢量与X轴间的角度(0.1度)0,/字

21、符基线与X轴间的角度。FW_HEAVY,/字体粗细TRUE,/是否为斜体。TRUE,/是否有下划线。0,/是否带删除线。GB2312_CHARSET,/指定字符集合O U T _ D E F A U L T _ P R E C I S,/字 符 输 出 精 度。CLIP_DEFAULT_PRECIS,/裁剪精度DRAFT_QUALITY,/输出质量FIXED_PITCH,/字体间距和字体类型MyFont“/指定字体的字样名);/创建逻辑字体OldFont=pDC-SelectObject(&MyFont);/将创建的逻辑字体选入当前DC,保存原来的字体pDC-TextOut(0,150,str

22、);pDC-SelectObject(OldFont);/恢复DC中原来的字体三、使用标准字体三、使用标准字体任何语种的Windows都支持六种库存字体/标准字体,它们分别是:SYSTEM_FONT(系统字体)、ANSI_FIXED_FONT(固定系统字体)、ANSI_VAR_FONT(可变系统统)、DEVICE_DEFAULT_FONT(与设备相关字体)、OEM_FIXED_FONT(与OEM相关字体)、SYSTEM_FIXED_FONT(固定宽度的系统字体)。用户可直接选用这些标准字体。可以调用CDC:SelectStockObject成员函数选用标准字体对象,该函数使用说明如下:格式:v

23、irtual CGdiObject*SelectStockObject(int nIndex);功能:选择预定义的库存字体、画笔或画刷所对应的CGdiObject对象。返回:调用成功则返回指向被替换的CGdiObject对象的指针,否则返回NULL。参数:nIndex-指定预定义的对象。nIndex取值可以是下列对象之一:SYSTEM_FONT(系统字体)ANSI_FIXED_FONT(固定系统字体)ANSI_VAR_FONT(可变系统统)DEVICE_DEFAULT_FONT(与设备相关字体)OEM_FIXED_FONT(与OEM相关字体)SYSTEM_FIXED_FONT(固定宽度的系统字

24、体)BLACK_PEN(黑色画笔)NULL_PEN(空画笔)WHITE_PEN(白色画笔)BLACK_BRUSH(黑色画刷)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_FI

25、XED_FONT;CString str=The road of success!;pDC-SetTextColor(RGB(0,0,255);for(int i=0;iSelectStockObject(nFontsi);pDC-TextOut(200,40*(i+2),str);4.3.1基本图形显示基本图形显示用用CDC绘图函数绘制基本图形与前面介绍的用CDC文本函数输出文本的步骤相同(见本章4.2.1节三步曲)。另外CDC还派生了CPaintDC、CClientDC、CWindowDC等类。一、常用绘图函数一、常用绘图函数CDC:SetPixel格式:COLORREF SetPixel

26、(int x,int y,COLORREF crColor);COLORREF SetPixel(POINT point,COLORREF crColor);功能:设置指定坐标像素为最接近crColor所指定的颜色。返回:若调用成功,返回指定坐标像素的实际RGB值。例:在OnDraw函数中,添加如下语句pDC-SetPixel(50,50,RGB(0,0,255);则点(50,50)被画为兰色。CDC:MoveTo/LineTo格式:CPoint MoveTo(int x,int y);CPoint MoveTo(POINT point);功能:将当前位置移到(x,y)或point参数指定的点

27、。返回:将先前位置(x,y)坐标返回给Cpoint对象。格式:BOOL LineTo(int x,int y);BOOL LineTo(POINT point);功能:从当前位置向指定点绘制一条直线,但不包括指定的点。返回:若调用成功,则返回非0。例:在OnDraw函数中,添加如下语句pDC-MoveTo(10,10);pDC-LineTo(500,200);则绘制一条从(10,10)到(500,200)的直线。CDC:CDC:Arc格式:BOOL Arc(int x1,y1,int x2,int y2,int x3,int y3,int x4,int y4);BOOL Arc(LPCRECT

28、 lpRect,POINT ptStart,POINT ptEnd);功能:绘制一个椭圆弧。所画弧是由指定的限定矩形所定义的椭圆的一部分。返回:若调用成功,则返回非0。参数:x1-限定矩形左上角的逻辑x坐标。y1-限定矩形左上角的逻辑y坐标。x2-限定矩形右下角的逻辑x坐标。y2-限定矩形右下角的逻辑y坐标。x3-弧起点的逻辑x坐标(不一定在弧上)。y3-弧起点的逻辑y坐标(不一定在弧上)。x4-弧终点的逻辑x坐标(不一定在弧上)。y4-弧终点的逻辑y坐标(不一定在弧上)。lpRect-指定限定矩形(以逻辑单位计),可以是一个CRect对象或指向RECT结构的指针。ptStart-指定弧起点的

29、逻辑(x,y)坐标,可以是一个POINT结构或一个CPoint对象。ptEnd-指定弧终点的逻辑(x,y)坐标,可以是一个POINT结构或一个CPoint对象。例:在OnDraw函数中,添加如下语句pDC-Arc(40,100,80,120,10,110,60,105);则绘制一条椭圆弧。其中,(10,110)为椭圆弧起点的逻辑坐标,(60,105)为椭圆弧终点的逻辑坐标。CDC:Ellipse格式:BOOL Ellipse(int x1,y1,int x2,int y2);BOOL Ellipse(LPCRECT lpRect);功能:绘制一个椭圆。返回:若调用成功,则返回非0。例:在OnD

30、raw函数中,添加如下语句pDC-Ellipse(100,200,400,300);pDC-Ellipse(100,300,300,500);则在矩形区(100,200,400,300)绘制一个椭圆,在正方形区(100,300,300,500)绘制一个圆。CDC:Rectangle格式:BOOL Rectangle(int x1,int y1,int x2,int y2);BOOL Rectangle(LPCRECT lpRect);功能:使用当前画刷绘制一个矩形。返回:若调用成功,则返回非0。例:在OnDraw函数中,添加如下语句 pDC-Rectangle(200,20,300,60);则

31、绘制一个矩形(200,20,300,60)。CDC:Polygon格式:BOOL Polygon(LPPOINT lpPoints,int nCount);功能:绘制一个多边形。返回:若调用成功,则返回非0。参数:lpPoints-指向POINT结构或CPoint对象数组。每个数组元素定义一个多边形的顶点。nCounts-指定数组的顶点数。例:在OnDraw函数中,添加如下语句 POINT point3=400,160,490,220,350,210;pDC-Polygon(point,3);则绘制一个三角形。CDC:Chord格式:BOOL Chord(int x1,y1,int x2,in

32、t y2,int x3,int y3,int x4,int y4);BOOL Chord LPCRECT lpRect,POINT ptStart,POINT ptEnd);功能:绘制一个带弦的椭圆弧,即由椭圆弧和线段构成的封闭图形。返回:若调用成功,则返回非0。参数:X1,y1-弦的限定矩形左上角的逻辑x,y坐标。X2,y2-弦的限定矩形右下角的逻辑x,y坐标。X3,y3-弦起点的逻辑x,y坐标。X4,y4-弦终点的逻辑x,y坐标。lpRect-指定限定矩形,可以是一个CRect对象或指向RECT结构的指针。ptStart-指定弧起点,可以是一个CPoint对象或指向POINT结构。ptEn

33、d-指定弧终点,可以是一个CPoint对象或指向POINT结构。(x3,y3)和(x4,y4)可以是矩形内的一点,也可以是矩形外的一点Example:在OnDraw函数中,添加如下语句 pDC-Chord(100,20,300,300,130,100,250,250);则绘制一条带弦的椭圆弧。CDC:Pie格式:BOOL Pie(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4);BOOL Pie(LPRECT lpRect,POINT ptStart,PONT ptEnd);功能:绘制一个饼图,即绘制椭圆弧并且弧的两个端点与圆心相

34、连。返回:若函数调用成功,则返回非0。参数:x1-限定矩形左上角的逻辑x坐标。y1-限定矩形左上角的逻辑y坐标。x2-限定矩形右下角的逻辑x坐标。y2-限定矩形右下角的逻辑y坐标。x3-弧起点的逻辑x坐标。y3-弧起点的逻辑y坐标。x4-弧终点的逻辑x坐标。y4-弧终点的逻辑y坐标。lpRect-指定限定矩形,可以是一个CRect对象或指向RECT结构的指针。ptStart-指定弧起点,可以是一个CPoint对象或指向POINT结构。ptEnd-指定弧终点,可以是一个CPoint对象或指向POINT结构。(x3,y3)和(x4,y4)可以是矩形内的一点,也可以是矩形外的一点。Example:在

35、OnDraw函数中,添加如下语句 pDC-Pie(100,100,400,300,130,100,250,250);则绘制一条椭圆弧并且弧的两个端点与圆心相连。CDC:RoundRect格式:BOOL RoundRect(int x1,int y1,int x2,int y2,int x3,int y3);BOOL RoundRect(LPCRECT lpRect,POINT point);功能:绘制一个圆角的矩形。返回:若调用成功则返回非0。参数:x1-矩形左上角的逻辑x坐标。y1-矩形左上角的逻辑y坐标。x2-矩形右下角的逻辑x坐标。y2-矩形右下角的逻辑y坐标。x3-椭圆逻辑宽度。y3-

36、椭圆逻辑高度。lpRect-指定限定矩形的逻辑坐标。可以是一个CRect对象或指向RECT结构的指针。point-x坐标指定椭圆的逻辑宽度,y坐标指定椭圆的逻辑高度。Example:在OnDraw函数中,添加如下语句 pDC-RoundRect(100,100,400,300,50,50);则绘制一个圆角矩形(100,100,400,300)。其中圆角用直径为50逻辑单位的圆与该矩形的四个角内切得到。CDC:PolyBezier(*)格式:BOOL PolyBezier(const POINT*lpPoint,int nCount);功能:绘制一段或多段Bezier样条(Spline)。返回:

37、若调用成功则返回非0。参数:lpPoint-指向一个POINT结构的数组,其中包含样条的端点和控制点。nCount-指定lpPoints数组中的点数,必须比画的样条数大1。3次Bezier曲线需要2个控制点和一个终点,还要一个起点,即4个点决定一段Bezier曲线。Example:在OnDraw函数中,添加如下语句 POINT pt7=40,30,160,60,270,100,300,220,300,220,200,120,400,20;pDC-PolyBezier(pt,7);则在7个点间绘制一段贝塞尔样条曲线。二、二、CDC的派生类的派生类 CDC有几个常用的派生类:CPaintDC、CC

38、lientDC、CwindowDC。它们的用法有比较细微的差别。1、CPaintDC类类CPaintDC类(绘制设备环境类)适用于重画图形。即该类仅在OnPaint消息处理函数中使用。说明:这里OnPaint函数是由重画消息WM_PAINT(即窗口被重画时产生此消息)来响应的。CPaintDC类构造器类构造器:格式:CPaintDC(CWnd*pDC);功能:构造一个CPaintDC对象。典型用法典型用法1:CPaintDC dc(this);以上代码的含义是在当前窗口中创建CPaintDC对象(即获取当前窗口的设备环境)。当使用ClassWizard类向导增添WM_PAINT消息的OnPai

39、nt消息处理函数时,此代码将自动产生。典型用法典型用法2:CPaintDC*pDC=new CPaintDC(this);delete pDC;Example:用MFC AppWizard创建一SDI程序;选择ClassWizard-Messages-WM_PAINT-Add Function-Edit Code,在OnPaint函数中,添加红色部分的语句 。CPaintDC dc(this);/device context for painting/TODO:Add your message handler code here/Do not call CView:OnPaint()for p

40、ainting messagesCRect rc;GetClientRect(&rc);dc.Ellipse(&rc);则用CPaintDC对象绘制一个椭圆,该椭圆充满用户区窗口(内切于用户区边界)。说明:由于CPaintDC、CClientDC、CWindowDC类均有自动释放设备环境的能力(由相应类的销毁器完成),所以释放设备环境这一步也省略不写了。但CDC类无此能力,所以必须要释放设备环境这一步。2、CClientDC类类CClientDC类的使用比较随意,它可以在何时候使用(一般常用它来进行实时作图)。CClientDC类构造器类构造器:格式:CClientDC(CWnd*pDC);功

41、能:构造一个CClientDC对象。典型用法:CClientDC dc(this);以上代码的含义是在当前窗口用户区中创建CClientDC对象。这里的代码要由程序员增添。Example:用MFC AppWizard创建一SDI程序;选择ClassWizard-Messages-WM_LBUTTONDOWN-Add Function-Edit Code,在OnLButtonDown函数中添加下面语句 CClientDC dc(this);CRect myrc;GetClientRect(&myrc);dc.Ellipse(&myrc);则单击MOUSE时,将绘制一个椭圆,该椭圆充满用户区窗口(

42、内切于用户区边界)。3、CWindowDC类类CWindowDC类的使用与CClientDC类很相似,也可以在任何时候使用。但CWindowDC类所不同的是:它可以在整个应用程序的窗口上画图,该类也许适用于一些游戏程序和其它特殊的一些应用程序。CWindowDC类构造器类构造器:格式:CWindowDC(CWnd*pDC);功能:构造一个CWindowtDC对象。典型用法典型用法:CWindowDC dc(this);以上代码一般要由程序员增添。dc对象可用于存取CWnd对象的全部屏幕区域,包括用户区和非用户区。程序例程序例:用Win32 Application创建一SDI程序。单击MOUSE

43、时,绘制一个椭圆,该椭圆充满应用程序窗口。程序见CH4GA工程的EXGA.CPP文件。程序清单:/exga.cpp#includeclass CMinApp:public CWinApppublic:virtual BOOL InitInstance();class CMainFrame:public CFrameWndprotected:afx_msg void OnLButtonDown(UINT nFlags,CPoint point);DECLARE_MESSAGE_MAP();BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd)ON_WM_LBUTTONDO

44、WN()END_MESSAGE_MAP()void CMainFrame:OnLButtonDown(UINT nFlags,CPoint point)CWindowDC dc(this);CRect myrc;GetWindowRect(&myrc);/获取应用程序窗口坐标赋给myrcdc.Ellipse(myrc);CFrameWnd:OnLButtonDown(nFlags,point);BOOL CMinApp:InitInstance()CMainFrame*pFrame=new CMainFrame;pFrame-Create(0,_T(Another Minimal MFC Pr

45、ogram);pFrame-ShowWindow(SW_SHOWMAXIMIZED);pFrame-UpdateWindow();this-m_pMainWnd=pFrame;return TRUE;CMinApp MyApp;程序例程序例:用MFC AppWizard创建一SDI程序。单击MOUSE时,在客户区绘制一些图形。void CCH4GBView:OnLButtonDown(UINT nFlags,CPoint point)/TODO:Add your message handler code here and/or call defaultCClientDC dc(this);dc

46、.SetPixel(5,5,RGB(0,0,0);dc.MoveTo(10,10);dc.LineTo(300,200);dc.Arc(40,100,80,120,10,110,60,105);dc.Ellipse(100,200,400,300);dc.Ellipse(100,300,300,500);dc.Rectangle(200,10,300,50);POINT pt3=400,160,490,220,350,210;dc.Polygon(pt,3);CView:OnLButtonDown(nFlags,point);4.3.2 GDI对象对象 MFC中的CDC类提供了在显示器、打印机

47、上绘图的方法。MFC还提供用于绘图的工具GDI对象类(又称图形对象类)。CGdiObject类是图形对象类的基类,它派生了CPen(画笔类)、CBrush(画刷类)、CFont(字体类)、CBitmap(位图类)等具体的绘图工具。GDI对象对象分自定义的GDI对象和库存的GDI对象两种(后者使用CDC:SelectStockObject将库存的GDI选入当前DC:)。使用GDI对象绘图(或输出文本:见创建逻辑字体一节)一般步骤:Step 1:定义GDI对象(如CPen对象、CBrush对象等);Step 2:用相应GDI对象的函数创建GDI对象(如CPen:CreatePen、CBrush:C

48、reateSolidBrush等);Step 3:调用CDC:SelectObject函数将上一步构造的GDI对象选入当前设备环境,并保存原来的GDI对象;Step 4:绘图结束后,恢复当前设备环境原来的GDI对象。一、CPen类(画笔)CPen类是是MFC绘图的笔,它有绘图的笔,它有风格、宽度、颜色等属性等属性。程序员可以通过调用CPen类成员函数生成画笔的方法来决定图形线条的宽度、颜色和显示风格,如虚线,实线,点划线等。CPen类常用成员函数介绍:1、CPen:CPen格式:CPen(int nPenStyle,int nWidth,COLORREF crColor);功能:构造并初始化一

49、个CPen对象。参数:nPenStyle-指定画笔风格,可取如下值:PS_SOLID 实线 Creates a solid pen.(_)PS_DASH 虚线,宽度必须为一 Creates a dashed pen.Valid only when the pen width is 1 or less,in device units.(-)PS_DOT 点线,宽度必须为一 Creates a dotted pen.Valid only when the pen width is 1 or less,in device units.(.)PS_DASHDOT 点划线,宽度必须为一 Creates

50、a pen with alternating dashes and dots.Valid only when the pen width is 1 or less,in device units.(_._._._)PS_DASHDOTDOT 双点划线,宽度必须为一 Creates a pen with alternating dashes and double dots.Valid only when the pen width is 1 or less,in device units.(_._._._)PS_NULL 空线,使用时什么也不会产生 Creates a null pen.PS_I

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(第4讲边框窗口、与视文本、字体、图形输出课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|