CPaintDC、CClientDC、CWindowDC和CMetaFileDC类的主要特点及区别-Windows绘图基础知识

一、设备环境(DC)的概念
(1)在Windows中,显示工作是基于设备环境的。所谓设备环境(DC)是一种Windows数据结构,该结构包含应用程序设备输
出时所需要的信息。
(2)在使用任何绘图函数之前必须建立一个设备环境对象。
(3)在Visual C++ 6.0的MFC中提供了设备环境类CDC,它封装了绘图所需要的所有函数,其中包括了大多数的Windows API中
的GDI函数。
二、几个设备环境类主要特点
1. CDC类
  CDC类是CObject类的派生类,也是所有设备环境类的基类。CDC类定义了一个设备描述对象,并提供了对设备描述对象进行
操作的成员函数以及对与窗口客户区有关的显示区进行操作的成员函数。
 CDC类提供的成员函数可以用于操作设备描述对象、使用绘图工具、选择图形设备界面,以及操作颜色和调色板,还用于取
得和设置绘图属性、映射方式、视图和窗口范围的操作、坐标的转换、区域的使用、剪取、画线以及绘制图形和文字等操作。
2. CPaintDC类
  CPaintDC类是CDC类的一个派生类,该类一般用在响应WM_PAINT消息的函数OnPaint()中。
  WM_PAINT消息是当窗口的某个区域需要重画时激发的窗口消息。当程序中的消息循环接到WM_PAINT消息时就自动调用消息处
理函数OnPaint(),如果在OnPaint函数内定义了CPaintDC类的对象,通过这个类对象就可以使用CDC类的成员函数完成视图客
户区中的图形绘制操作。
3. CClientDC类
  CClientDC类也是CDC类的派生类。它只能在窗口的客户区(即窗口中除了边框、标题栏、菜单栏以及状态栏外的中间部分)
中进行绘图,坐标点(0,0)通常指的是客户区的左上角。它的构造函数调用GegDC函数,而析构函数调用ReleaseDC函数。
4. CWindowDC类
  CWindowDC类也是CDC类的派生类。其成员函数可以在窗口的客户区和非客户区(即窗口的边框、标题栏、菜单栏以及状态
栏)中绘图,坐标点(0,0)是指整个屏幕的左上角。同CClientDC类一样,它的构造函数调用GegDC函数,而析构函数调用
ReleaseDC函数。
5. CMdtaFileDC类
  CMetaFileDC类提供了一个面向Windows图元文件的设备环境,封装了在一个Windows图元文件中绘图的方法。图元文件是一
个与设备无关的图片的集合,由于它对图像的保存比像素更精确,因而往往在要求较高的场合下使用,例如AutoCAD的图形保
存等。
三、几个设备环境类的主要差别
常用设备环境类有CPaintDC、CClientDC、CWindowDC和CMetaFileDC类
1. CWindowDC类与CPaintDC 、CClientDC类的区别
其区别主要有以下两个方面:
(1)用CPaintDC 和CClientDC类的对象绘制图形时,绘制区只能在客户区,而不能在非客户区;而CwindowDC类既可以在窗口
的客户区也可以在非客户区进行图形绘制。
(2)在CWindowDC绘图类下,坐标系是建立在整个屏幕上的,在像素坐标方式下,坐标原点在屏幕的左上角;而在CPaintDC和
CClientDC绘图类下,坐标系是建立在客户区上的,在像素坐标方式下,坐标原点在客户区的左上角。
2. CPaintDC类与CClientDC类的区别
CPaintDC类的对象应用在OnPaint函数中,以响应Windows的WM_PAINT消息;而CClientDC类的对象应用在非响应消息WM_PAINT
的情况下。
CPaintDC类响应WM_PAINT消息,并自动完成绘制,这对维护图形的完整性有着重要的作用。CClientDC类可以实时地将图形绘
制到屏幕上,不需要重画;而如果用CPaintDC类的对象完成同样的工作,只能发出消息让屏幕上包含这条直线的区域重画,以
把这条直线绘制到屏幕上。
四、几个设备环境类的使用方法
1. CDC类
因为CDC类不能用窗口对象指针初始化对象,所以,一般不直接定义对象。
2. CPaintDC类
CPaintDC 类一般用在窗口类OnPaint函数中,可采用如下代码定义一个CPaintDC类对象:
CPaintDC dc(this);
以上代码定义了一个CPaintDC类的对象dc,并用当前的窗口对象指针this对对象进行了初始化。CClientDC和CWindowDC类也采
用这样的方法。
3. CClientDC类
可利用以下代码定义一个对象:CClientDC dc(this);
4. CWindowDC 类
利用以下代码创建一个CWindowDC类的对象:CWindowDC dc(this);

五、绘图设备类
1.GDI的概念
Windows为设备环境提供了各种各样的绘图工具,如【画笔】、【画刷】以及【字体】等。在MFC中封装了这些工具,这些类称
为GDI类,它们有一个共同的抽象基类CGdiObject,可以将这些绘图设备类创建的对象选入到设备环境中,完成有关的操作。

2.常用的绘图设备类
在MFC中主要的绘图设备类有:CGdiObject、CPen、CBrush、CFont、CBitmap、CRgn和CPalette等。
(1)CGdiObject类
CGdiObject类派生于CObject类,它是CGdiObject、CPen、CBrush、Cfont和CBitmap等的基类。用户不能直接生成一个
CGdiObject类,而必须在它的某种设备继承类中生成一个CGdiObject类的派生类。
(2)CPen类
CPen类是CGdiObject类的一个派生类,它封装了Windows图形设备接口(GDI)中有关画笔的操作。
(3)CBrush类
(4)Cfont类
(5)CBitmap类
3.常用的绘图设备类对象的创建和将其引入到设备环境中的方法
在选择绘图设备类对象(GDI对象)进行绘图时,一般可按下列步骤进行:
(1)定义一个GDI对象,然后调用相应的函数(如CreatePen、CreateSolidBrush等)创建此GDI对象。
(2)将已构造出的GDI对象利用设备环境类对象的成员函数SelectObject选入到当前环境中,并同时将原来的GDI对象保存起
来。
(3)绘图结束后,恢复当前设备环境中原来的GDI对象。
注意:在Windows系统中包含了一些库存的GDI对象,在第(3)步中可直接利用设备环境类(CDC)的成员函数
SelectStockObject将一个Windows库存的GDI对象选入,系统可自动将原来选入的GDI对象从设备环境中分离出来。

以下扩展内容自行搜索
六、Windows下的坐标映像方式和特点以及如何设置坐标映像方式。
七、几种常见的Windows的坐标映像方式下的坐标转换方法。
八、几种常见的基本图形元素如点、直线、矩形和文字等的绘制方式。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值