MFC绘图控制-设备描述表

来源:互联网 发布:有什么金融软件 编辑:程序博客网 时间:2024/05/22 13:22

一、设备描述表的基本知识

1、为了实现设备无关性,应用程序的输出不直接面向显示器等物理设备,而是面向一个称之为设备环境DC(Device Context)的虚拟逻辑设备。

 

2、设备环境也称设备描述表或设备上下文。它是由Windows管理的一个数据结构,它保存了绘图操作中一些共同需要设置的信息,如当前的画笔、画刷、字体和位图等图形对象及其属性,以及颜色和背景等影响图形输出的绘图模式。形象地说,一个设备环境提供了一张画布和一些绘画的工具,我们可以使用不同颜色的工具在上面绘制点、线、圆和文本。

 

3、设备环境中的“设备”是指任何类型的显示器或打印机等输出设备。绘图时用户不用关心所使用设备的编程原理和方法。所有的绘制操作必须通过设备环境进行间接的处理,Windows自动将设备环境所描述的结构映射到相应的物理设备上。

 

4、在Windows中不使用DC无法进行输出,在使用任何GDI绘图函数之前,必须建立一个设备环境。


二、获取设备描述表

MFC的CDC类将Windows设备描述表和获取设备描述表句柄的GDI函数封装在一起,CDC的派生类如CPaintDC和CClientDC代表应用程序使用的不同类型的设备描述表。

(1)CWnd::GetDC()

CDC *pDC = GetDC();//Do some drawingReleaseDC(pDC);

说明:获得窗口客户区设备描述表指针。


(2)CWnd::GetWindowDC()

CDC *pDC = GetWindowDC();//Do some drawingReleaseDC(pDC);
说明:获得窗口任意地方设备描述表指针。


(3)CDC的派生类

1)CPaintDC类

响应WM_PAINT消息,允许在窗口客户区画图,只能在OnPaint()处理函数中使用,不能在其他地方使用。WM_PAINT消息不同于其他Windows消息,CPaintDC的构造函数和析构函数能够保证该消息从消息队列中删除,避免了应用程序一遍又一遍处理同一个WM_PAINT消息而陷入死循环。

CPaintDC dc(this);//Do some drawing

2)CClientDC和CWindowDC类

可创建在OnPaint()外使用用户区域设备描述表。CClientDC获得窗口客户区,CWindowDC获得客户区和非客户区。

CClientDC dc(this);//Do some drawingCWindowDC dc(this);//Do some drawing

说明:

(1)各个类的构造函数和析构函数调用相应的函数捕获和释放设备描述表。

(2)当在栈上构造设备描述表对象时,若对象的生命周期结束,则它的析构函数会被自动调用,设备描述表会被返回给Windows。

(3)当在堆上构造设备描述表对象时,需在函数结束前执行删除语句,以便调用对象的析构函数释放设备描述表。

CClientDC *pDC = new CClientDC(this);//Do some drawingdelete pDC;


三、设备描述表属性

1 0
原创粉丝点击