第 4 章 图形( graphic )

18
第 4 第 第第Graphic 4.1 DC 和 GDI 4.2 CDC 和 4.3 CPen 和 4.4 CBrush 和 4.5 和和和和 4.6 和和和 CFont 和 4.7 CDC 和和和和和和

Upload: tuan

Post on 08-Jan-2016

112 views

Category:

Documents


5 download

DESCRIPTION

第 4 章 图形( Graphic ). 4.1 DC 和 GDI 4.2 CDC 类 4.3 CPen 类 4.4 CBrush 类 4.5 绘图模式 4.6 文本和 CFont 类 4.7 CDC 的其他派生类. 应用程序. DC. 设备驱动程序. 物理图形设备. 4.1 DC 和 GDI. Windows 是依靠 图形设备接口 ( GDI )和 设备描述环境 ( DC )对图形进行支持的。. 1. 设备描述环境. DC (Device Context). 虚拟图形设备(隐藏了底层的千差万别). 画板 Canvas. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第 4 章 图形( Graphic )

第 4 章 图形( Graphic )

4.1 DC 和 GDI

4.2 CDC类4.3 CPen类4.4 CBrush类4.5 绘图模式4.6 文本和 CFont类4.7 CDC的其他派生类

Page 2: 第 4 章 图形( Graphic )

4.1 DC4.1 DC 和和 GDIGDI

WindowsWindows 是依靠是依靠图形设备接口图形设备接口(( GDIGDI )和)和设备描述环设备描述环境境(( DCDC )对图形进行支持的。)对图形进行支持的。

1. 1. 设备描述环境设备描述环境

应用程序

应用程序

DC

DC

设备驱动程序

设备驱动程序

物理图形设备

物理图形设备

虚拟图形设备(隐藏了底层的千差万别)虚拟图形设备(隐藏了底层的千差万别)

DCDC(Device Context)(Device Context)

数据结构:图形设备描述表,虚拟图形设备的属性。该数据结构:图形设备描述表,虚拟图形设备的属性。该表也叫做图形设备描述环境,简称表也叫做图形设备描述环境,简称 DC.DC.

画板画板CanvasCanvas

Page 3: 第 4 章 图形( Graphic )

4.1 DC4.1 DC 和和 GDIGDI

2. Windows2. Windows 的的 GDIGDI

GDI (GDI (GGraphical raphical DDevice evice IInterface, nterface, 图形设备接口图形设备接口 )) WindowsWindows 把用于改变把用于改变 DCDC 属性的属性的操作操作做成做成函数函数,这些函数,这些函数

的的集合集合叫做叫做 GDIGDI 。。 DCDC 种类多,如显示器、文件、打印机等。绘图前必须先确种类多,如显示器、文件、打印机等。绘图前必须先确

定定 DCDC 。。 GDIGDI 提供完整的绘图工具。如笔、刷、字体等。这些工具不提供完整的绘图工具。如笔、刷、字体等。这些工具不

能删除,只能在同类工具之间进行替换。能删除,只能在同类工具之间进行替换。

Page 4: 第 4 章 图形( Graphic )

4.2 CDC4.2 CDC 类类

DCDCGDIGDI

CDC class将将 DCDC 和和 GDIGDI 的功能进的功能进

行封装,形成行封装,形成 CDCCDC 类。类。

CObjectCObject

CDCCDC

CPaintDCCPaintDC CClientDCCClientDC CWindowDCCWindowDC CMetaFileDCCMetaFileDC

在 整 个 窗 口在 整 个 窗 口内 ( 不 只 是内 ( 不 只 是用户 区 ) 绘用户 区 ) 绘图的图的 DCDC

图元文件的图元文件的DCDC , 在 创, 在 创建 可 以 回 放建 可 以 回 放的 图 像 时 使的 图 像 时 使用用

代 表 窗 口 客 户代 表 窗 口 客 户区,但应用在区,但应用在WM_PAINTWM_PAINT 消消息 之 外 的 消 息息 之 外 的 消 息处理函数中处理函数中

代表窗口用户区,代表窗口用户区,在在 OnDraw()OnDraw()函数中来处理函数中来处理WM_PAINTWM_PAINT 消消息息

Page 5: 第 4 章 图形( Graphic )

4.2 CDC4.2 CDC 类类

表 4-2 CDC 类中一些常用的成员函数

Page 6: 第 4 章 图形( Graphic )

4.2 CDC4.2 CDC 类类关于关于 CView::OnDrawCView::OnDraw 函数函数

OnDraw(CDC * pDC);OnDraw(CDC * pDC);

pDCpDC 实际上是实际上是 CPaintDCCPaintDC 类型的指针类型的指针

系统创建窗口以及窗口需要刷新时系统创建窗口以及窗口需要刷新时

WM_PAINTWM_PAINT

产生产生

调用调用

用户也可以强制产生用户也可以强制产生 WM_PAINTWM_PAINT 消息消息如如 InvalidateRect()InvalidateRect() 等等

P82: P82: 例例 4-14-1

Page 7: 第 4 章 图形( Graphic )

4.3 CPen4.3 CPen 类类

画笔(画笔( CPenCPen 类):用于绘制线条。类):用于绘制线条。 CObjectCObject

CGdiObjectCGdiObject

CPenCPen

属性:属性:• stylestyle• widthwidth• colorcolor

默 认 画 笔 : 实 线默 认 画 笔 : 实 线(( stylestyle )、)、 1pixel1pixel (( widtwidthh )、)、 BlackBlack (( colorcolor ))

画笔的使用方法:画笔的使用方法:

1. 1. 新建画笔对象,并确定其属新建画笔对象,并确定其属性性 CPen(int style, int width, COLORREF color)CPen(int style, int width, COLORREF color)

CPen newPen(PS_SOLID, 2, RGB(255,0,0);CPen newPen(PS_SOLID, 2, RGB(255,0,0);

COLORREFCOLORREF• The The COLORREFCOLORREF value is a 32- value is a 32-bit value used to specify an RGB bit value used to specify an RGB color. E.g. 0x00rrggbbcolor. E.g. 0x00rrggbb• COLORREF RGB(BYTE bRed, COLORREF RGB(BYTE bRed, BYTE bGreen, BYTE bBlue);BYTE bGreen, BYTE bBlue);

2. 2. 替 换 原 画 笔 , 使 用替 换 原 画 笔 , 使 用CDC::SelectObject()CDC::SelectObject()

CPen * SelectObject(CPen * pPen);CPen * SelectObject(CPen * pPen);

CPen * pOldPen = pDC->SelectObject(&newPen);CPen * pOldPen = pDC->SelectObject(&newPen);

3. 3. 恢 复 原 画 笔 , 仍 使 用恢 复 原 画 笔 , 仍 使 用CDC::SelectObject()CDC::SelectObject()

pDC->SelectObject(pOldPen);pDC->SelectObject(pOldPen);

Page 8: 第 4 章 图形( Graphic )

4.3 CPen4.3 CPen 类类

Page 9: 第 4 章 图形( Graphic )

4.4 CBrush4.4 CBrush 类类画刷(画刷( CBrushCBrush )类:对封闭图形内部用颜色或)类:对封闭图形内部用颜色或图案进行填充。图案进行填充。

CObjectCObject

CGdiObjectCGdiObject

CBrushCBrush

属性:属性: STYLESTYLE COLORREFCOLORREF

构造函数原型构造函数原型 ::CBrush(COLORREF color);CBrush(COLORREF color);CBrush(int style, COLORREF color);CBrush(int style, COLORREF color);

Page 10: 第 4 章 图形( Graphic )

4.4 CBrush4.4 CBrush 类类

P85P85 :例:例 4-44-4

Page 11: 第 4 章 图形( Graphic )

4.5 4.5 绘图模式绘图模式绘图的最终效果可通过设定不同的绘图模式来修饰。绘图的最终效果可通过设定不同的绘图模式来修饰。

设 置 途 径 :设 置 途 径 : CDC::SetROP2(int CDC::SetROP2(int nDrawMode);,nDrawMode);,The SetROP2 function sets the current foreground mix mode. GDI uses the foreground mix mode to combine pens and interiors of filled objects with the colors already on the screen. The foreground mix mode defines how colors from the brush or pen and the colors in the existing image are to be combined.

前景色的混合前景色的混合模式模式

Page 12: 第 4 章 图形( Graphic )

4.5 4.5 绘图模式绘图模式例 例 4-A4-A

Page 13: 第 4 章 图形( Graphic )

4.6 4.6 文本和文本和 CFontCFont 类类

自学自学

Page 14: 第 4 章 图形( Graphic )

CPaintDC::OnDrawCPaintDC::OnDraw

用户区用户区

CClientDCCClientDC

WM_PAINTWM_PAINT

WM_PAINTWM_PAINT

4.7 CDC4.7 CDC 的其他派生类的其他派生类窗口用户区设备描述环境窗口用户区设备描述环境 CClientDCCClientDC 类类

CClientDCCClientDC 比比 CPaintDCCPaintDC 更加灵活更加灵活

Page 15: 第 4 章 图形( Graphic )

4.7 CDC4.7 CDC 的其他派生类的其他派生类

窗口用户区设备描述环境窗口用户区设备描述环境 CClientDCCClientDC 类类

单击鼠标时,绘制完整的菱形单击鼠标时,绘制完整的菱形 窗口被遮盖后,复原窗口被遮盖后,复原

用户区没有重新用户区没有重新绘制,为什么?绘制,为什么?

Page 16: 第 4 章 图形( Graphic )

4.7 CDC4.7 CDC 的其他派生类的其他派生类图元文件设备描述环境图元文件设备描述环境 CMetaFileDCCMetaFileDC 类类

图元文件(图元文件( MetaFileMetaFile ):图形事先绘制好并存放在一个):图形事先绘制好并存放在一个文件,并存储在内存中,需要时直接打开它,这种图形文件叫文件,并存储在内存中,需要时直接打开它,这种图形文件叫做图元文件。做图元文件。

CMetaFileDCCMetaFileDC 类类 一般在一般在 CView::OnCreate()CView::OnCreate() 创建创建 在需要绘制时,在需要绘制时, CDC::playMetaFile()CDC::playMetaFile() 使用完毕需要销毁,使用完毕需要销毁, DeleteMetaFile()DeleteMetaFile()

P94: P94: 例例 4-104-10

图元文件句柄图元文件句柄

Page 17: 第 4 章 图形( Graphic )

4.7 CDC4.7 CDC 的其他派生类的其他派生类

图元文件设备描述环境图元文件设备描述环境 CMetaFileDCCMetaFileDC 类类

已生成图元文件已生成图元文件

Page 18: 第 4 章 图形( Graphic )

4.7 CDC4.7 CDC 的其他派生类的其他派生类

图元文件设备描述环境图元文件设备描述环境 CMetaFileDCCMetaFileDC 类类

使用图元文件使用图元文件

别忘了销毁别忘了销毁

CClientDC( CWnd* pWnd );Use this constructor to construct a CClientDC object that accesses the client area of

the CWnd pointed to by pWnd.

CClientDC( CWnd* pWnd );Use this constructor to construct a CClientDC object that accesses the client area of

the CWnd pointed to by pWnd.