为何需要CDC类
几乎所有的应用程序都需要在窗口中以某种方式来显示它们的数据,或者使用图形,或者使用文本,或者二者兼而有之。Windows使用与设备无关的图形设备环境(DC :Device Context) 进行显示 。MFC基础类库定义了设备环境对象类----CDC类
CDC与CGdiObject的关系
说道CDC类就不能不提一下GdiObject---图形对象类。 在Windows应用程序中,设备环境与图形对象共同工作,协同完成绘图显示工作。就像画家绘画一样,设备环境好比是画家的画布,图形对象好比是画家的画笔。用画笔在画布上绘画,不同的画笔将画出不同的画来。选择合适的图形对象和绘图对象,才能按照要求完成绘图任务。
有关CDC类的继承
父类:从 CObject 直接继承而来。继承了CObject类的各种特性,如动态创建等等。
子类:CClientDC-------代表操作窗口的DC ,是比较常用的一个子类
CMetaFileDC ------响应Meta File的DC ,Meta File是一些GDI消息。
CPaintDC-------响应WM_PAINT消息的DC。
CWindowDC ------代表整个屏幕的DC
CDC类的数据成员
数据成员只有两个:
HDC m_hDC : CDC对象使用的输出设备上下文
HDC m_hAttribDC : CDC对象使用的属性设备上下文
二者在CDC对象创建时指向相同的设备上下文。
例子:
使用前者的实例为输出函数SetTextColor,使用后者的实例为属性函数GetTextColor。
CDC类提供了许多与窗口的客户区有关的设备环境中工作的成员函数,同样也提供了在全屏幕和打印机上工作的函数。
CDC类提供的成员函数可以完成的操作包括:设备环境操作,使用绘图工具,安全类型的图形设备对象(GDI对象)的选择,使用颜色,调色板等。
除此外,也可以完成诸如设置绘图属性,影射,在视中工作,在整个窗口中工作,坐标变换,区域操作,剪贴板操作,画线,画简单图形等各种工作。
由CDC类要完成的工能我们就可以知道,其成员函数一定很多。的确,与其仅有的两个数据成员来说,其成员函数数量是极多的。
有22组不同功能的函数集,将近150个函数。
22组函数集分别如下:
1 构造函数
CDC 构造一个CDC实例
2 初始化函数
CreateDC 为专门的设备构造一个设备环境
CreateCompatibleDC 构造一个与其它设备环境相适应的内存设备环境
GetCurrentBitmap 返回一个现在所选择的位图的指针。
GetCurrentBrush 返回一个指向但前所选择的画刷对象指针
GetCurrentFont
GetCurrentPalette
GetCurrentPen
GetWindow 返回一个与展示的设备环境相关的窗口
SetOutputDC 设定m_hDC 输出设备环境
SetAttribDC 设定m_hAttribDC 属性设备环境
3 设备上下文函数 Device-Context Functions
SaveDC 保存现在的设备环境状态
RestoreDC 取出原来所存的设备上下文状态
IsPrinting 判断当前设备环境是否用于打印
4 有关选择的函数
SelectObject 选择作图对象,如画笔,画刷,位图等
SelectPalette 选择调色板
SelectStockObject选择堆对象
5 线性输出函数
GetCurrentPosition 获得当前的位置
MoveTo 移动到指定的位置.有两种类型:
MoveTo(int ,int) 和MoveTo(POINT)
LineTo 从当前位置到指定位置之间画线 它也有两种类型的: LineTo(POINT), 和
LineTo(int, int)
Arc 画弧线
6 画图函数
FillRect 用指定的画刷填充矩形
Draw3dRect 画三维的矩形
7 位图函数
BitBlt 从指定的环境中复制为图 ,这个函数可以实现贴图,以及镂空图,半透明图等等
GetPixel 获得指定像素的RGB颜色值,可以通过此函数对各个像素的颜色值进行操作,以达到各种效果 。
FloodFill 用画刷填充一个区域
其实CDC 还有好多很有用的函数,大家有兴趣的话可以去查一下,在这里我就不再列举啦。
要学好CDC类,实现好的图形界面,大家需要下点功夫。所以建议学习CDC 的同时学好一下的一些东西,例如CDC的几个子类;CGdiObject类;Bitmap类;和一些结构体,如POINT,RECT,RGB等等。