MFC绘图类(CDC,CPaintDC,CClientDC,CWindowDC)简介

来源:互联网 发布:域名被通信局撤销 编辑:程序博客网 时间:2024/06/05 20:03

MFC的类CDC,CPaintDC,CClientDC,CWindowDC都可以用于绘图,我们在进行绘图时对怎么使用这几个类常常混淆。

其中CDC类是基础,另外的几个类是为了特殊应用从CDC类派生出来的,下面对这几个类进行简单的介绍。

(1)CDC类

CDC是CObject类的一个派生类,CDC类是所有绘图类的基类,CDC类定义了一个设备描述对象。CDC类提供了对这个设备描述对象进行操作的成员函数,还有

也对窗口客户区有关的显示区进行操作的成员函数进行了支持,通过CDC类以及其派生类创建的对象,可以利用CDC类的所有成员函数来完成图形的绘制工作。CDC

类提供的成员函数可以用于对设备描述对象进行的操作,绘图工具的使用,图形设备界面以及颜色和调色板的操作,其成员函数还可以取得和设置绘图属性,映像方式

,视口以及窗口范围的操作,坐标转换,区域使用,裁剪,绘图以及显示文字等。

CDC类包含了与图形绘制的相关的大部分操作,为了适应Windows编程的具体需要,又派生出了下面几个派生类。

(2)CPaintDC类

CPaintDC是CDC类的一个派生类,他用于模拟响应Windows消息WM_Paint的设备环境,在这个类中可以使用CDC中的所有成员函数。CPaintDC类一般用在函数

OnPaint()中,响应WM_Paint消息,WM_Paint是窗口的的某个区域需要进行重画是所激发的窗口消息,一个用CPaintDC类创建的对象是按下面的机制调用的:Windos的

的消息循环机制一直都在采集各种消息,当接到WM_Paint消息时,就自动调用消息处理函数OnPaint,在OnPaint函数中创建CPaintDC类对象,通过这个类对象使用CDC类

的成员函数,完成视图客户区中的图形绘制操作。

(3)CClientDC类

CClientDC类也是CDC类的一个派生类,它为非响应Windows消息WM_Paint的成员函数提供了一个设备环境。

(4)CWindowDC类

CWindowDC类也是CDC类的一个派生类,它提供了一个设备环境以便成员函数在包括非客户区在内的真个屏幕区域内绘图。

(5)几个类的主要区别

CWindowDCk类与CPaintDC,CClientDC区别的一个方面是:CPaintDC和CClientDC的类的对象绘制图形时,绘制区只可以是客户区,不能在非客户区,但是CWindowDC可以在非客户区进行绘制。

CWindowDCk类与CPaintDC,CClientDC区别的一个方面是:在CWindowDC下,坐标系是建立在整个屏幕上的,在像素坐标的方式下,坐标原点在屏幕的左上角,但是CPaintDC以及CClientDC坐标系是建立在客户区上的,在像素坐标的方式下,坐标原点在客户区的左上角。

CPaintDC和CClientDC都是在窗口的客户区内绘制图形,但是二者的在绘制机制上有着本质的区别。CPaintDC类对象应用在OnPaint函数中,相应WM_PAINTt消息,但是CClientDC是应用在非响应消息WM_PAINT的情况下的。

(6)使用方法

6.1 CDC类

因为CDC类不能用窗口对象指针初始化对象,所以一般不直接创建对象,但经常用来建立一个内存设备描述对象,创建方法如下

CDC dc;

6.2CPaintDC类

CPaintDC类一般用在窗口类的OnPaint函数中,可以采用如下的代码创建一个CPaintDC类对象

CPaintDC dc(this);

以上的代码创建一个CPaintDC类对象dc,并用当前的窗口对象指针this对对象进行了初始化。

CClientDC和CWindowDC也采用这样的使用方法

6.3CClientDC类

以下代码创建一个CClientDC对象

CClientDC dc(this);

以上的代码创建一个CClientDC类对象dc,并用当前的窗口对象指针this对对象进行了初始化。

6.4CWindowDC类

CWindowdc dc(this);

0 0
原创粉丝点击