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

本文解释了MFC中的CDC类及其与HDC句柄的关系,详细介绍了如何在MFC中进行设备上下文的创建、转换及使用。
CDC是MFC的DC的一个类 
HDC是DC的句柄,API中的一个类似指针的数据类型. 
MFC类的前缀都是C开头的 
H开头的大多数是句柄 
这是为了助记,是编程读\写代码的好的习惯. 
CDC中所有MFC的DC的基类.常用的CClientDCdc(this);就是CDC的子类(或称派生类). 
CDC等设备上下分类,都含有一个类的成员变量:m_nHdc;即HDC类型的句柄. 
记住下面的一句话,会有助于你的理解. 
MFC的类,是在用windowAPI语句开发出来的有一定功能的小程序.(也可称为类).使用它的默认方法,就是,记住它的名字与参数(可以用笔记,代替脑记). 
如果将window api比做汇编语言 
那么MFC就相当于Basic语言.
cdc是设备描述表的基类,clientDC指代客户区的设备描述表,PaintDC只用于OnPaint()函数中


CDC是MFC的DC的一个类 
HDC是DC的句柄,API中的一个类似指针的数据类型. 
MFC类的前缀都是C开头的 
H开头的大多数是句柄 
这是为了助记,是编程读\写代码的好的习惯. 
CDC中所有MFC的DC的基类.常用的CClientDCdc(this);就是CDC的子类(或称派生类). 
CDC等设备上下分类,都含有一个类的成员变量:m_nHdc;即HDC类型的句柄. 
记住下面的一句话,会有助于你的理解. 
MFC的类,是在用windowAPI语句开发出来的有一定功能的小程序.(也可称为类).使用它的默认方法,就是,记住它的名字与参数(可以用笔记,代替脑记). 
如果将window api比做汇编语言 
那么MFC就相当于Basic语言.


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

CDC 到HDC 的转化:
2007-05-09 12:04
方法一: 此方法在设备结束时不会销毁原来的资源(即: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);

回复于 2004-04-08 17:46:03 得分 20

HDC   hdc;  
  CDC  cdc;   
  cdc到hdc  
  hdc   cdc.GetSafeHdc();  
  hdc到cdc  
  cdc.Attach(hdc)  
    
    
回复于 2004-04-08 17:49:14 得分 15

CDC   是MFC中的类  
  而HDC是Handle  
  使用  
  HDC  GetDC()

回复于 2004-04-08 17:51:49 得分 0 

CDC   cdc;  
  HDC   hDC  =   cdc.m_hDC

回复于 2004-04-08 17:54:20 得分 20

CDC   dc;  
  HDC   hDC  =   dc.m_hDC  
  dc.FromHandle(hDC);

回复于 2004-04-08 18:01:51 得分 10

CDC   to   hdc  
  用成员变量m_hDC  
  hdc   to  CDC   
  用FromHandle

回复于 2004-04-08 18:02:47 得分 10

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

转自:http://blog.sina.com.cn/s/blog_523491650100gwii.html
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值