第9章文字和图形处理技术.ppt

上传人:本田雅阁 文档编号:2094658 上传时间:2019-02-13 格式:PPT 页数:67 大小:3.10MB
返回 下载 相关 举报
第9章文字和图形处理技术.ppt_第1页
第1页 / 共67页
第9章文字和图形处理技术.ppt_第2页
第2页 / 共67页
第9章文字和图形处理技术.ppt_第3页
第3页 / 共67页
亲,该文档总共67页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第9章文字和图形处理技术.ppt》由会员分享,可在线阅读,更多相关《第9章文字和图形处理技术.ppt(67页珍藏版)》请在三一文库上搜索。

1、课件制作人:宋坤,第 9 章 文字和图形处理技术,【学习目标】,与其他许多编程工具相比,Visual C+在图形、图像的处理方面更胜一筹。 l 了解GDI对象和设备上下文 l 掌握各种样式文本的输出 l 掌握各种图形的绘制 l 掌握对图形进行颜色填充 l 掌握图像的绘制 l 掌握图像在窗口中的一些操作,课件制作人:宋坤,【学习导航】,课件制作人:宋坤,【知识框架】,课件制作人:宋坤,本章目录,9.1 GDI概述 9.2 设备上下文介绍 9.3 GDI对象 9.4 文本输出 9.5 绘制图形 9.6 绘制图像 9.7 课后习题,课件制作人:宋坤,9.1 GDI概述,以往许多MSDOS程序采用直接

2、向视频存储区或打印机端口输送数据,这种做法不利之处是需要各种显示卡(低分辨率彩色图形显示卡、加强图形显示卡以及图像图形阵)或打印机驱动程序,支持所有这些设备意味着要用大量的编程来包含这些驱动程序(为每一个设备编写不同的代码)。为了减轻开发程序的难度,Windows提供了一个抽象的接口,图形设备接口Graphics Device Interface(GDI)。另外,Windows还提供了各种显示卡及打印机的驱动程序,这样在写程序时就可以不必关心显示卡和打印机的类型,简化了程序开发的难度。其实,GDI是微软公司提供的一组绘图函数,通常称之为GDI函数。使用这些函数可以绘制各种图形。本章将介绍有关G

3、DI的相关知识。,课件制作人:宋坤,9.2 设备上下文介绍,设备上下文的英文全称是Device Context,简称为DC。设备上下文是用来绘制图形的逻辑设备,编程人员可以在该设备上绘制直线、曲线和立方体等各式各样的几何图案及在设备上输出文字。在开发应用程序时往往要在输出设备上输出程序的运行结果。输出设备通常指的是显示器和打印机,但程序员需要了解显示器和打印机的特性才能将结果显示在输出设备上,而了解显示器和打印机特性这个过程会花去程序员的大部分时间,为减少开发应用程序的开发时间及开发难度,就提出设备上下文这个概念。通过使用设备上下文,编程人员可以不必关心输出设备的具体特性,直接绘制最终的结果,

4、而余下的工作都交给系统来完成。 在Windows应用程序中,每个窗口都关联有设备上下文,用户只要获得了窗口的设备上下文,就可以在窗口中绘制各种文本、图形图像等信息了。,课件制作人:宋坤,9.2 设备上下文介绍,例如: void CDrawDlgDlg:OnPaint() HDC hDC; hDC = GetDC()-m_hDC; char data = “明日科技有限公司!“; TextOut(hDC,60,30,data,strlen(data); /代码省略 在向设备上下文中输出文本时,文本将显示在对话框中,如图。,课件制作人:宋坤,9.3 GDI对象,为了方便用户在设备上下文中绘制信息,

5、Windows提供了6个GDI对象,分别为画笔CPen、画刷CBrush、字体CFont、位图CBitmap、调色板CPallette和区域CRgn。 CPen CPen类封装了Windows的画笔对象。画笔对象主要用于绘制线条,通过画笔对象,可以设置绘制线条的宽度、颜色、风格等信息。CPen类的主要方法如下。 1CreatePen方法 CreatePen方法用于动态创建一个画笔对象。 语法: BOOL CreatePen( int nPenStyle, int nWidth, COLORREF crColor ); BOOL CreatePen( int nPenStyle, int nWi

6、dth, const LOGBRUSH* pLogBrush, int nStyleCount = 0, const DWORD* lpStyle = NULL ); CreatePen方法参数说明如表9-1所示。,课件制作人:宋坤,9.3 GDI对象,课件制作人:宋坤,9.3 GDI对象,void CDrawDlg1Dlg:OnPaint() HDC hDC; hDC = GetDC()-m_hDC; CPen pen; /创建一个红色的宽度为2的画笔 pen.CreatePen(PS_SOLID,2,RGB(255,0,0); /选中画笔 SelectObject(hDC,pen); CR

7、ect rc(80,30,200,80); /利用画笔绘制矩形 Rectangle(hDC,80,30,200,80); /代码省略 ,下面利用CreatePen方法创建了一个画笔对象,并且利用该画笔绘制了一个矩形。,课件制作人:宋坤,9.3 GDI对象,2CreatePenIndirect方法 CreatePenIndirect方法根据LOGPEN结构信息直接创建画笔。 语法: BOOL CreatePenIndirect( LPLOGPEN lpLogPen ); lpLogPen:表示LOGPEN结构指针,该结构描述了画笔的宽度、风格和颜色信息。 CBrush 画刷用来填充诸如多边形、椭

8、圆和路径等图形内部的位图形式的像素。例如,在绘制一个矩形时,需要在矩形内部填充颜色或位图等,这需要使用画刷对象。CBrush的主要方法如下。 1CreateSolidBrush方法 CreateSolidBrush方法用指定的颜色创建画刷。 语法: BOOL CreateSolidBrush( COLORREF crColor ); crColor:表示画刷的颜色。,课件制作人:宋坤,9.3 GDI对象,下面利用CreateSolidBrush方法创建一个蓝色的画刷,并将其填充在矩形中。例如:填充矩形的程序设计步骤如下。 void CDrawDlg2Dlg:OnPaint() CDC* pDC

9、 = GetDC(); /获取对话框的设备上下文指针 CBrush brush; /定义画刷对象 brush.CreateSolidBrush(RGB(0,0,255); /创建蓝色的画刷 pDC-SelectObject( /代码省略 ,课件制作人:宋坤,9.3 GDI对象,2CreateHatchBrush方法 CreateHatchBrush方法用于创建阴影画刷。 语法: BOOL CreateHatchBrush( int nIndex, COLORREF crColor ); nIndex:表示画刷的阴影风格,可选值如表9-3所示。,课件制作人:宋坤,9.3 GDI对象,3Creat

10、eBrushIndirect方法 CreateBrushIndirect方法使用LOGBRUSH结构信息直接创建画刷。 语法: BOOL CreateBrushIndirect( const LOGBRUSH* lpLogBrush ); lpLogBrush:表示LOGBRUSH结构指针,LOGBRUSH结构描述了画刷的风格、颜色和虚线等信息。 4CreatePatternBrush方法 CreatePatternBrush方法用于创建一个位图画刷。利用位图画刷,用户可以将位图填充到一个区域中。 语法: BOOL CreatePatternBrush( CBitmap* pBitmap );

11、 pBitmap:表示一个位图对象指针。,课件制作人:宋坤,下面利用CreatePatternBrush方法创建一个位图画刷,并将其填充到对话框的客户区域中。例如: void CDrawDlg3Dlg:OnPaint() CDC* pDC = GetDC(); /获取对话框的设备上下文指针 CBrush brush; /定义画刷对象 CBitmap bmp; /定义一个位图 bmp.LoadBitmap(IDB_BITBRUSH); brush.CreatePatternBrush( /代码省略 ,课件制作人:宋坤,9.3 GDI对象,5CreateDIBPatternBrush方法 Crea

12、teDIBPatternBrush方法利用设备无关位图的调色板创建画刷。 语法: BOOL CreateDIBPatternBrush( HGLOBAL hPackedDIB, UINT nUsage ); BOOL CreateDIBPatternBrush( const void* lpPackedDIB, UINT nUsage ); hPackedDIB:包含一个全局内存对象,用于标识设备无关位图信息。 lpPackedDIB:表示设备无关位图信息,通常为BITMAPINFO结构指针。 nUsage:表示BITMAPINFO结构中的bmiColors成员是否表示RGB值。可选值如表9-

13、4所示。,课件制作人:宋坤,9.3 GDI对象,6CreateSysColorBrush方法 CreateSysColorBrush方法创建系统预定义的颜色画刷。 语法: BOOL CreateSysColorBrush( int nIndex ); nIndex:表示画刷的阴影风格,可选值如表9-3所示。 CFont 字体是一种具有某种风格和尺寸的所有字符的完整集合,它常常被当作资源存于磁盘中,其中有一些字体还依赖于某种设备。MFC提供了CFont类用于封装字体对象,该类的主要方法如下。 1CreateFontIndirect方法 CreateFontIndirect方法利用LOGFONT结

14、构信息直接创建字体对象。 语法: BOOL CreateFontIndirect(const LOGFONT* lpLogFont ); lpLogFont:表示LOGFONT结构指针,LOGFONT结构中描述了字体的高度、宽度、字符集、下划线、字体名称等信息,定义如下: typedef struct tagLOGFONT LONG lfHeight; /字体高度 LONG lfWidth; /字体宽度 LONG lfEscapement; /水平角度 LONG lfOrientation; /字体方向 LONG lfWeight; /字体线条宽度 BYTE lfItalic; /斜体 BYT

15、E lfUnderline; /是否有下划线 BYTE lfStrikeOut; /加粗 BYTE lfCharSet; /字体使用的字符集 BYTE lfOutPrecision; /字体输出的精度 BYTE lfClipPrecision; /字体的剪辑进度 BYTE lfQuality; /字体的质量 BYTE lfPitchAndFamily; /字符间距和字体属性 TCHAR lfFaceNameLF_FACESIZE; /字体的命名 LOGFONT;,课件制作人:宋坤,9.3 GDI对象,2CreateFont方法 CreateFont方法用于创建一个字体。 语法: BOOL Cr

16、eateFont( 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 ); 其参数与LOGFONT结构的成员是对应的,具体含义请参考CreateFontIndirect方法。 3C

17、reatePointFont方法 CreatePointFont方法根据字体大小和字体名称创建字体。 语法: BOOL CreatePointFont( int nPointSize, LPCTSTR lpszFaceName, CDC* pDC = NULL ); nPointSize:表示字体大小,单位是十分之一像素。例如,如果该参数为150,则表示15个像素大小。 lpszFaceName:表示字体名称。 pDC:表示一个CDC对象指针,用于转换nPointSize到逻辑单位。如果为NULL,将以屏幕的设备上下文作为转换的依据。 4CreatePointFontIndirect方法 Cr

18、eatePointFontIndirect方法与CreateFontIndirect方法相同,利用LOGFONT结构信息直接创建字体对象。只是LOGFONT结构中的lfHeight成员以像素的十分之一为单位,而CreateFontIndirect方法中LOGFONT结构的lfHeight成员以设备单位表示。 语法: BOOL CreatePointFontIndirect( const LOGFONT* lpLogFont, CDC* pDC = NULL ); lpLogFont:表示LOGFONT结构指针,LOGFONT结构中描述了字体的高度、宽度、字符集、下划线、字体名称等信息。 pDC

19、:表示一个CDC对象指针,用于转换LOGFONT结构的lfHeight成员到逻辑单位。如果为NULL,将以屏幕的设备上下文作为转换的依据。,课件制作人:宋坤,9.3 GDI对象, CBitmap 位图是一种位矩阵,每一个显示像素都对应于其中的一个或多个位。程序中可以利用位图来表示图像,也可以利用它来创建画刷。MFC中提供了CBitmap类封装来Windows中的位图对象,CBitmap类的主要方法如下。 1LoadBitmap方法 LoadBitmap方法用于加载一个位图资源到位图对象上。 语法: BOOL LoadBitmap( UINT nIDResource ); BOOL LoadBi

20、tmap( LPCTSTR lpszResourceName ); nIDResource:表示位图资源ID。当用户通过工作区的资源视图窗口中导入一幅位图时,会自动生成一个资源ID。LoadBitmap方法能够利用资源ID将位图资源关联到当前的位图对象上。 lpszResourceName:表示位图资源名称。在程序中可以使用MAKEINTRESOURCE宏将资源ID转换为资源名称。 2LoadOEMBitmap方法 LoadOEMBitmap方法用于加载预定义的Windows位图。 语法: BOOL LoadOEMBitmap( UINT nIDBitmap ); nIDBitmap:表示预定

21、义的位图号码。 3LoadMappedBitmap方法 LoadMappedBitmap方法用于加载位图资源,并且映射位图颜色到当前的系统颜色中。 语法: BOOL LoadMappedBitmap( UINT nIDBitmap, UINT nFlags = 0, LPCOLORMAP lpColorMap = NULL, int nMapSize = 0 ); LoadMappedBitmap方法参数说明如表9-5所示。,课件制作人:宋坤,9.3 GDI对象,4CreateBitmap方法 CreateBitmap方法用于创建一个位图资源。 语法: BOOL CreateBitmap( i

22、nt nWidth, int nHeight, UINT nPlanes, UINT nBitcount, const void* lpBits ); CreateBitmap方法参数说明如表9-6所示。,课件制作人:宋坤,9.3 GDI对象,5CreateBitmapIndirect方法 CreateBitmapIndirect方法利用BITMAP结构信息直接创建位图。 语法: BOOL CreateBitmapIndirect( LPBITMAP lpBitmap ); lpBitmap:表示BITMAP结构指针,该结构描述了位图的相关信息,定义如下: typedef struct tag

23、BITMAP int bmType; /标识位图的类型,如果为逻辑位图,必须为0 int bmWidth; /以像素为单位标识位图的宽度,该值必须大于0 int bmHeight; /以像素为单位标识位图的高度,该值必须大于0 int bmWidthBytes; /标识每一行使用的字节数 BYTE bmPlanes; /标识位图中调色板的数量 BYTE bmBitsPixel; /每个像素占用的位数 LPVOID bmBits; /位图数据 BITMAP; 6CreateCompatibleBitmap方法 CreateCompatibleBitmap方法用于创建一个与指定设备上下文兼容的位图

24、。 语法: BOOL CreateCompatibleBitmap( CDC* pDC, int nWidth, int nHeight ); pDC:表示设备上下文指针。 nWidth:表示位图宽度。 nHeight:表示位图高度。 7CreateDiscardableBitmap方法 CreateDiscardableBitmap方法用于创建一个与指定设备上下文兼容的可废弃的位图。所谓可废弃位图是指在内存紧张的情况下,Windows可以从内存中清除位图资源。 语法: BOOL CreateDiscardableBitmap( CDC* pDC, int nWidth, int nHeigh

25、t ); pDC:表示设备上下文指针。 nWidth:表示位图宽度。 nHeight:表示位图高度。,课件制作人:宋坤,9.3 GDI对象,8GetBitmap方法 GetBitmap方法用于获取位图信息,将其填充到BITMAP结构中。 语法: int GetBitmap( BITMAP* pBitMap ); pBitMap:表示BITMAP结构指针,用于存储方法返回的位图信息。 CPalette 调色板在一个应用程序和一个颜色输出设备之间提供了一个接口,通过这个接口应用程序可以拥有自己的颜色索引,可以提高程序的运行速率及提高应用程序的颜色处理能力。在MFC中,CPalette类封装了Win

26、dows调色板对象,其主要方法如下。 1CreatePalette方法 CreatePalette方法用于创建一个调色板资源,并将其关联到调色板对象上。 语法: BOOL CreatePalette( LPLOGPALETTE lpLogPalette ); lpLogPalette:表示LOGPALETTE结构指针,该结构描述了逻辑调色板信息,定义如下: typedef struct tagLOGPALETTE WORD palVersion; /表示系统的版本号,应该为0x300 WORD palNumEntries; /表示调色板中的表项数,对于灰度图,该值为256 PALETTEENT

27、RY palPalEntry1; /表示调色板中的颜色表项 LOGPALETTE; 2CreateHalftonePalette方法 CreateHalftonePalette方法用于创建一个半色调调色板。 语法: BOOL CreateHalftonePalette( CDC* pDC ); pDC:表示设备上下文指针。 3AnimatePalette方法 AnimatePalette方法用于替换指定逻辑调色板的入口点。 语法: void AnimatePalette( UINT nStartIndex, UINT nNumEntries, LPPALETTEENTRY lpPaletteC

28、olors ); nStartIndex:表示要替换的第1个调色板的入口点。 nNumEntries:表示被替换的入口点数量。 lpPaletteColors:表示指向数组结构第1个元素的指针,用来替换当前的入口点。,课件制作人:宋坤,9.3 GDI对象,4GetNearestPaletteIndex方法 GetNearestPaletteIndex方法用于返回与指定颜色接近的调色板入口点索引。 语法: UINT GetNearestPaletteIndex( COLORREF crColor ) const; crColor:表示颜色值。 5ResizePalette方法 ResizePal

29、ette方法用于改变逻辑调色板的大小。 语法: BOOL ResizePalette( UINT nNumEntries ); nNumEntries:表示调色板入口点的数量。如果该参数小于原来的调色板入口点大小,则调整后剩余的入口点不改变;如果该参数大于原来的调色板入口点大小,则额外的入口点被设置为黑色。 6GetEntryCount方法 GetEntryCount方法用于返回调色板中入口点的数量。 语法: int GetEntryCount( ); 7GetPaletteEntries方法 GetPaletteEntries方法用于返回调色板中的一组入口点。 语法: UINT GetPal

30、etteEntries( UINT nStartIndex, UINT nNumEntries, LPPALETTEENTRY lpPaletteColors ) const; nStartIndex:表示方法返回的入口点的起始位置。 nNumEntries:表示返回的入口点数量。 lpPaletteColors:用于接收方法返回的入口点信息。 8SetPaletteEntries方法 SetPaletteEntries方法用于设置调色板中入口点的RGB颜色值。 语法: UINT SetPaletteEntries( UINT nStartIndex, UINT nNumEntries, LP

31、PALETTEENTRY lpPaletteColors ); nStartIndex:表示方设置的入口点的起始位置。 nNumEntries:表示设置的入口点数量。 lpPaletteColors:用于设置的入口点信息。,课件制作人:宋坤,9.3 GDI对象, CRgn Windows中的区域对象由多边形,椭圆或二者组合形成的一种范围,可以利用它来进行区域的填充、裁剪以及鼠标点的测试。MFC中提供了CRgn类封装区域对象,该类的主要方法如下。 1CreateRectRgn方法 CreateRectRgn方法用于创建一个矩形区域。 语法: BOOL CreateRectRgn( int x1,

32、 int y1, int x2, int y2 ); CreateRectRgn方法参数说明如表9-7所示。,2CreateRectRgnIndirect方法 CreateRectRgnIndirect方法根据RECT结构信息创建矩形区域。 语法: BOOL CreateRectRgnIndirect( LPCRECT lpRect ); lpRect:表示RECT结构指针,其定义如下: typedef struct tagRECT int left; /矩形区域的左上角x轴坐标 int top; /矩形区域的左上角y轴坐标 int right; /矩形区域的右下角x轴坐标 int botto

33、m; /矩形区域的右下角y轴坐标 RECT; 3CreateEllipticRgn方法 CreateEllipticRgn方法用于根据外接矩形创建一个椭圆形区域。 语法: BOOL CreateEllipticRgn( int x1, int y1, int x2, int y2 ); CreateRectRgn方法参数说明如表9-8所示。,课件制作人:宋坤,9.3 GDI对象,4CreatePolygonRgn方法 CreatePolygonRgn方法用于创建一个多边形区域。 语法: BOOL CreatePolygonRgn( LPPOINT lpPoints, int nCount, i

34、nt nMode ); lpPoints:表示多边形的顶点。 nCount:表示多边形的顶点数量。 nMode:表示区域的填充模式。 5CreatePolyPolygonRgn方法 CreatePolyPolygonRgn方法用于创建一组封闭的多边形组成的区域。 语法: BOOL CreatePolyPolygonRgn( LPPOINT lpPoints, LPINT lpPolyCounts, int nCount, int nPolyFillMode ); CreatePolyPolygonRgn方法参数说明如表9-9所示。,课件制作人:宋坤,9.3 GDI对象,6CombineRgn方

35、法 CombineRgn方法用于组合区域。 语法: int CombineRgn( CRgn* pRgn1, CRgn* pRgn2, int nCombineMode ); pRgn1:表示一个区域对象指针。 pRgn2:表示一个区域对象指针。 nCombineMode:表示组合模式,可选值如表9-10所示。,7PtInRegion方法 PtInRegion方法用于判断某个坐标点是否在指定的区域中。 语法: BOOL PtInRegion( int x, int y ) const; BOOL PtInRegion( POINT point ) const; x:表示坐标点的x轴坐标。 y:

36、表示坐标点的y轴坐标。 point:表示一个坐标点。,课件制作人:宋坤,9.4 文本输出,使用TextOut方法在指定位置输出文本 使用ExtTextOut方法在指定区域输出文本 使用TabbedTextOut方法根据制表位输出文本 使用DrawText方法格式化输出文本 设置文本背景颜色,课件制作人:宋坤,使用TextOut方法在指定位置输出文本,(1)创建一个单文档视图的应用程序。 (2)在视图类的OnDraw方法中添加如下代码: void CSetBkColorView:OnDraw(CDC* pDC) CSetBkColorDoc* pDoc = GetDocument(); ASSE

37、RT_VALID(pDoc); /输出绘制的文本 pDC-TextOut(50,30,“明日科技”); char pstr=“明日科技有限公司”; pDC-TextOut(50,60, pstr); ,课件制作人:宋坤,使用TextOut方法在指定位置输出文本,(3)从输出可以清楚的看到文本的背景颜色已经被修改成绿色,如图9-9、图9-10所示。,课件制作人:宋坤,使用ExtTextOut方法在指定区域输出文本,CDC类提供了ExtTextOut方法用于在指定的区域中输出文本。 语法: virtual BOOL ExtTextOut( int x, int y, UINT nOptions,

38、LPCRECT lpRect, LPCTSTR lpszString, UINT nCount, LPINT lpDxWidths ); BOOL ExtTextOut( int x, int y, UINT nOptions, LPCRECT lpRect, const CString ExtTextOut方法参数说明如表9-12所示。,课件制作人:宋坤,使用ExtTextOut方法在指定区域输出文本,下面以一个具体实例介绍如何使用ExtTextOut方法在指定区域输出文本。 程序设计具体步骤如下。 (1)创建一个单文档视图结构的应用程序。 (2)在CMainFrame类的OnCreate方

39、法中设置窗口的图标。 SetIcon(LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_EXTTEXTYPE),TRUE); (3)在视图类的OnDraw方法中输出文本。 void CExtTextOutView:OnDraw(CDC* pDC) CExtTextOutDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); /定义一个区域对象 CRect rc(90,60,155,80); pDC-ExtTextOut(rc.left,rc.top,ETO_CLIPPED,rc,“明日科技有限公司“,N

40、ULL); rc.SetRect(90,90,155,110); pDC-ExtTextOut(rc.left,rc.top,0,rc,“明日科技有限公司“,NULL); (4)运行程序,效果如图9-6所示。,课件制作人:宋坤,使用TabbedTextOut方法根据制表位输出文本,CDC类提供了TabbedTextOut方法用于在制定位置显示文本,并用指定的制表间距扩展制表符。 语法: virtual CSize TabbedTextOut( int x, int y, LPCTSTR lpszString, int nCount, int nTabPositions, LPINT lpnTa

41、bStopPositions, int nTabOrigin ); CSize TabbedTextOut( int x, int y, const CString TabbedTextOut方法参数说明如表9-13所示。,课件制作人:宋坤,使用TabbedTextOut方法根据制表位输出文本,下面通过修改视图类中的OnDraw方法来使用TabbedTextOut函数,程序步骤如下。 (1)创建一个单文档视图的应用程序。 (2)在视图类的OnDraw方法中添加如下代码: void CTabbedTextOutView:OnDraw(CDC* pDC) CTabbedTextOutDoc* pD

42、oc = GetDocument(); ASSERT_VALID(pDoc); CString str=“明 日 科 技 有限 公司“; /一共用了5次TAB制表符 int array5=100,250,400,550,700; pDC-TabbedTextOut(10,20,str,-1,5,array,10); pDC-TextOut(10,40,str); 其中str字符串中用了5个TAB制表符,array数组表示的是每个制表符所需扩充的大小,通过同时使用TabbedTextOut和TextOut进行文本输出,可以发现使用TextOut方法TAB制表符只显示为一个黑色长条,而Tabbed

43、TextOut方法则按照array数组中的数据对各个制表符进行了不同的扩充。 (3)程序运行结果如图9-7所示。,课件制作人:宋坤,使用DrawText方法格式化输出文本,CDC类提供了DrawText方法用于在指定的区域中输出文本。 语法: virtual int DrawText( LPCTSTR lpszString, int nCount, LPRECT lpRect, UINT nFormat ); int DrawText( const CString DrawText方法参数说明如表9-14所示。,下面以一个具体实例介绍如何使用DrawText方法在指定区域输出文本。 程序设计具

44、体步骤如下: (1)创建一个单文档视图结构的应用程序。 (2)在CMainFrame类的OnCreate方法中设置窗口的图标。 SetIcon(LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_EXTTEXTYPE),TRUE); (3)在视图类的OnDraw方法中输出文本。,课件制作人:宋坤,使用DrawText方法格式化输出文本,void CDrawTextView:OnDraw(CDC* pDC) CDrawTextDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); /定义一个区域对象 CRe

45、ct rc(50,90,250,110); pDC-DrawText(“明日科技有限公司“,16,rc,DT_RIGHT); rc.SetRect(50,120,250,200); CString str=“明日科技有限公司“; pDC-DrawText(str,rc,DT_LEFT); (4)运行程序,效果如图9-8所示。,课件制作人:宋坤,设置文本背景颜色,文本的背景是指文本输出的矩形区域内除文本以外的其他部分。文本的背景颜色就是用来填充区域的颜色。调用CDC类成员函数SetBkColor可以设置文本的背景颜色。调用GetBkColor可以获取当前文本的背景颜色。 语法: Virtual

46、COLORREF SetBkColor(COLORREF crColor); COLORREF GetBkColor()const; crColor:用于设置输出文本的颜色,可以通过RGB函数指定。 要使设置的背景颜色起作用,必须将文本的背景模式设置为OPAGUE。 要实现上面功能,只需修改视图类中的OnDraw方法,方法如下。 (1)创建一个单文档视图的应用程序。 (2)在视图类的OnDraw方法中添加如下代码: void CSetBkColorView:OnDraw(CDC* pDC) CSetBkColorDoc* pDoc = GetDocument(); ASSERT_VALID(p

47、Doc); nbkmode=pDC-SetBkMode(OPAQUE); /设置背景模式为OPAQUE pDC-SetBkColor(RGB(0,255,0); /将背景设置为绿色 pDC-TextOut(30,60,“背景颜色改变“); ,课件制作人:宋坤,设置文本背景颜色,(3)从输出可以清楚的看到文本的背景颜色已经被修改成绿色,如图9-9、图9-10所示。,课件制作人:宋坤,9.5 绘制图形,利用点线绘制多边形 如何快速地绘制图形 如何填充指定的区域 绘制不规则图形,课件制作人:宋坤,利用点线绘制多边形,为了方便用户进行图形绘制,CDC类中特地提供了MoveTo和LineTo两个函数使用户可以利用点线进行图形的绘制。 语法: CPoint MoveTo( int x, int y ); CPoint MoveTo( POINT point ); BOOL LineTo( int x, int y ); BOOL LineTo( POINT point ); x,y:表示所希望到达的点的坐标, point:是指向POINT结构的一个对象。 一般绘制图形的时候,最开始是确定一个起始点,这时候就要使用MoveTo函数确定第1个点,然后从这个点出发依次到达其他的点,就可以绘制出想要的图形。 例如我们绘制一个三角形,可以按照如下方式写出代码。 (1)一个单文档视图模式的应

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1