VC中CDC与HDC的区别以及二者之间的转换

来源:互联网 发布:淘宝网天猫女装棉衣 编辑:程序博客网 时间:2024/06/10 13:48
    CDC是MFC的DC的一个类,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指代客户区的设备描述表,PaintDCOnPaint()函数中。


    HDC是WINDOWS的一种数据类型,是设备描述句柄。而CDC是MFC里的一个类,它封装了几乎所有的关于HDC的操作。也可以这样说,HDC定义的变量指向一块内存,这块内存用来描述一个设备的相关的内容,所以也可以认为HDC定义的是一个指针;而CDC类定义一个对象,这个对象拥有HDC定义的一个设备描述表,同时也包含与HDC相关的操作的函数。这与HPEN和CPen,POINT与CPoint之间的差别是一样的。




方法一: 此方法在设备结束时不会销毁原来的资源(即:hDC,hBitmap)


CDC *pDC = CDC::FromHandle(hDC);  
CBitmap *pBitmap = CBitmap::FromHandle(hBitmap);  


方法二: 此方法在设备结束时会销毁原来的资源(即:hDC,hBitmap)


CDC dc;  
HDC hDc;  
dc.Attach(hDC);  
CBitmap bit;  
bit.Attach(hBitmap); 


在结束的时候加dc.detach()也不会销毁原来资源


HDC hdc;  
CDC cdc;  
//cdc到hdc  
hdc = cdc.GetSafeHdc();  
//hdc到cdc  
cdc.Attach(hdc);  


方法三:


CDC dc;  
HDC hDC;   
hDC= dc.m_hDC             //cdc到hdc   
dc.FromHandle(hDC);    //hdc到cdc 


dc.FromHandle(hDC)产生一个dc,但是是临时的,mfc不保证系统在什么时候删除dc.
dc.Attach(hDC)是永久的,直到这个dc的生命正常结束。
原创粉丝点击