一:MFC中HDC与CDC区别和转化

来源:互联网 发布:淘宝新店铺转让 编辑:程序博客网 时间:2024/05/22 17:00

MFC中HDC与CDC区别和转化

 

CDC是MFC的DC的一个类 ,它封装了几乎所有的关于 HDC的操作。
HDC是DC的句柄,API中的一个类似指针的数据类型. 设备描述句柄。
MFC类的前缀都是C开头的
H开头的大多数是句柄
CDC中所有MFC的DC的基类.常用的CClientDC dc(this);就是CDC的子类(或称派生类).
CDC等设备上下分类,都含有一个类的成员变量:m_nHdc;即HDC类型的句柄.
记住下面的一句话,会有助于你的理解.
MFC的类,是在用window API语句开发出来的有一定功能的小程序.
如果将window api比做汇编语言
那么MFC就相当于Basic语言.

cdc是设备描述表的基类,clientDC指代客户区的设备描述表,PaintDC只用于OnPaint()函数中

也可以这样说,HDC定义的变量指向一块内存,这块内存用来描述一个设备的相关的内容,所以也可以 认为HDC定义的是一个指针;

而CDC类定义一个对象,这个对象拥有HDC定义的一个设备描述表,同时也包   含与HDC相关的操作的函数。  

这与HPEN和CPen,POINT与CPoint之间的差别是一样的。

CDC 到HDC 的转化:
方法一: 此方法在设备结束时不会销毁原来的资源(即:hDC,hBitmap)
CDC *pDC = CDC::FromHandle(hDC);
CBitmap *pBitmap = CBitmap::FromHandle(hBitmap);
方法二: 此方法在设备结束时会销毁原来的资源(即:hDC,hBitmap)
CDC dc;
dc.Attach(hDC);
CBitmap bit;
bit.Attach(hBitmap);
在结束的时候不加dc.detach()也不会销毁原来资源
HDC hdc;
CDC cdc;
cdc到hdc    hdc = cdc.GetSafeHdc();
hdc到cdc    cdc.Attach(hdc);

 

原创粉丝点击