【Visual C++】CDC与HDC的区别以及相互转换




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


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


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

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 <wbr>hdc; <wbr><wbr></wbr></wbr></wbr>
<wbr><wbr>CDC <wbr>cdc; <wbr><wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr>cdc到hdc <wbr><wbr></wbr></wbr></wbr></wbr>
<wbr><wbr>hdc <wbr>= <wbr>cdc.GetSafeHdc(); <wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr>hdc到cdc <wbr><wbr></wbr></wbr></wbr></wbr>
<wbr><wbr>cdc.Attach(hdc);</wbr></wbr>



tip1:
HDC <wbr>hdc; <wbr><wbr></wbr></wbr></wbr>
<wbr><wbr>CDC <wbr>cdc; <wbr><wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr>cdc到hdc <wbr><wbr></wbr></wbr></wbr></wbr>
<wbr><wbr>hdc <wbr>= <wbr>cdc.GetSafeHdc(); <wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr>hdc到cdc <wbr><wbr></wbr></wbr></wbr></wbr>
<wbr><wbr>cdc.Attach(hdc) <wbr><wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr></wbr></wbr></wbr>
<wbr><wbr><wbr></wbr></wbr></wbr>
tip2:

CDC <wbr>是MFC中的类 <wbr><wbr></wbr></wbr></wbr>
<wbr><wbr>而HDC是Handle <wbr><wbr></wbr></wbr></wbr></wbr>
<wbr><wbr>使用 <wbr><wbr></wbr></wbr></wbr></wbr>
<wbr><wbr>HDC <wbr>GetDC()</wbr></wbr></wbr>

tip3:<wbr></wbr>

CDC <wbr>cdc; <wbr><wbr></wbr></wbr></wbr>
<wbr><wbr>HDC <wbr>hDC <wbr>= <wbr>cdc.m_hDC</wbr></wbr></wbr></wbr></wbr>

tip4:

CDC <wbr>dc; <wbr><wbr></wbr></wbr></wbr>
<wbr><wbr>HDC <wbr>hDC <wbr>= <wbr>dc.m_hDC <wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr>dc.FromHandle(hDC);</wbr></wbr>

tip5:

CDC <wbr>to <wbr>hdc <wbr><wbr></wbr></wbr></wbr></wbr>
<wbr><wbr>用成员变量m_hDC <wbr><wbr></wbr></wbr></wbr></wbr>
<wbr><wbr>hdc <wbr>to <wbr>CDC <wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr>用FromHandle</wbr></wbr>

tip6:

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

tip7:
查找替换。将所有的(hdc,替换为pdc->(当然。前面声明个 <wbr></wbr>
<wbr><wbr>pdc就可以了。</wbr></wbr>


转自:http://blog.sina.com.cn/s/blog_523491650100gwii.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Visual C++和Dev-C++是两种不同的C++集成开发环境(IDE)。 Visual C++是由微软公司开发的商业IDE,它提供了丰富的功能和工具,包括代码编辑器、调试器、GUI设计器、代码分析器等。Visual C++还支持多种编译器和库,可以方便地开发Windows应用程序和游戏。 Dev-C++是一个免费的开源IDE,它由Bloodshed Software开发,提供了基本的代码编辑器、编译器和调试器。Dev-C++的界面简单易用,适合初学者和小型项目的开发。 总的来说,Visual C++是一个功能强大的商业IDE,适合大型项目和专业开发者;而Dev-C++是一个简单易用的免费IDE,适合初学者和小型项目的开发。 ### 回答2: Visual C++和DevC++都是Windows平台上比较常用的C++开发工具。它们都具有相似的功能和用途,但也有一些区别,下面就来简单介绍一下它们之间的区别。 1. 发布商和授权方式。Visual C++是微软发行的产品,采用商业授权方式;而DevC++由Bloodshed Software公司开发,采用GPL授权方式,可以免费使用。 2. 界面和编辑器。Visual C++采用集成开发环境(IDE),其界面十分美观、先进,有丰富的工具栏和项目管理界面等功能。而DevC++则采用较为简单的用户界面,没有Visual C++那么复杂,但是功能也比较基础,缺少一些高级功能。 3. 编译器。Visual C++使用微软自行开发的VC++编译器,具有良好的兼容性和性能优势。而DevC++则使用GNU编译器套件,编译器用gcc,这种编译器通常是跨平台的。 4. 调试器。Visual C++的调试器功能极其强大,有调试界面、断点、单步执行、堆栈追踪等常用调试功能。而DevC++的调试器要简单一些,但也能够满足常规调试需求。 5. 目标平台。Visual C++主要支持开发Windows平台相关应用程序,与衍生的Microsoft Visual Studio一样,对Windows上的GUI进行了良好的支持。而DevC++则可以编译并运行在许多不同平台上,包括Windows、Linux和Mac OS等。 总的来说,Visual C++在Windows平台上的开发优势更为明显,可扩展性和可定制化性更强;而DevC++则是一个免费的开源工具,并且可以增加自己的插件、用户命令等等,采用的是跨平台的开发模式,拥有良好的移植性和可扩展性。不同的使用场景需要不同的选择。 ### 回答3: Visual C++与Dev-C++是两种不同的C++编程语言IDE,它们的主要区别在于以下几个方面。 首先,Visual C++是由Microsoft开发的专业的IDE,而Dev-C++则是一个开源、基于Windows平台的IDE,开发者可以自由地下载和使用。 其次,Visual C++具有强大的GUI开发能力,支持创建Windows程序,可以轻松地添加各种组件,包括对话框、工具栏、菜单等等。而Dev-C++则没有这样的功能,因为它主要是面向开发者,偏重于开发算法、数据结构、控制台程序等。 第三,Visual C++支持多种操作系统平台,包括Windows、Linux、iOS等,而Dev-C++只能在Windows上运行。 此外,Visual C++的调试功能也非常强大,支持内存泄漏检测、代码分析、性能分析等。而Dev-C++也有调试功能,但相对而言不如Visual C++那么强大。 总的来说,Visual C++是一个专业的IDE,适合开发复杂的Windows程序,尤其是涉及GUI界面的程序。而Dev-C++则是一个免费的、轻量级的IDE,适合开发控制台程序,以及一些小型的、简单的项目。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值