zoukankan      html  css  js  c++  java
  • 【Visual C++】CDC与HDC的区别以及相互转换

     
     
     
    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指代客户区的设备描述表,PaintDC只用于OnPaint()函数中
     
     
    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语言.
     
     
    HDC是WINDOWS的一种数据类型,是设备描述句柄。   
      而CDC是MFC里的一个类,它封装了几乎所有的关于   
      HDC的操作。   
      也可以这样说,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);
     
     
     
    tip1:
    HDC   hdc;   
      CDC   cdc;   
      cdc到hdc   
      hdc   =   cdc.GetSafeHdc();   
      hdc到cdc   
      cdc.Attach(hdc)   
        
        
    tip2:
     
    CDC   是MFC中的类   
      而HDC是Handle   
      使用   
      HDC   GetDC()
     
    tip3:
     
    CDC   cdc;   
      HDC   hDC   =   cdc.m_hDC
     
    tip4:
     
    CDC   dc;   
      HDC   hDC   =   dc.m_hDC   
      dc.FromHandle(hDC);
     
    tip5:
     
    CDC   to   hdc   
      用成员变量m_hDC   
      hdc   to   CDC   
      用FromHandle
     
    tip6:
     
    dc.FromHandle(hDC)产生一个dc,但是是临时的,mfc不保证系统在什么时候删除dc.   
      dc.Attach(hDC)是永久的,直到这个dc的生命正常结束。
     
    tip7:
    查找替换。将所有的(hdc,替换为pdc->(当然。前面声明个   
      pdc就可以了。
     
     
    转自:http://blog.sina.com.cn/s/blog_523491650100gwii.html
  • 相关阅读:
    心得体悟帖---200130(专业长才(敲门砖))(希望)
    心得体悟帖---200130(一举多的)(少了发自内心的从容)
    范仁义css3课程---19、流动布局
    范仁义css3课程---18、overflow
    日常英语---200130(inspire)
    日常英语---200130(Basketball fans around the world are mourning the death of American superstar Kobe Bryant.)
    视频中的ts文件是什么
    如何美化windows桌面
    心得体悟帖---200127(囚笼-它会推着我的,不必多想)(过好当下,享受当下)
    心得体悟帖---有哪些越早知道越好的人生经验?(转自知乎)
  • 原文地址:https://www.cnblogs.com/dyllove98/p/2461862.html
Copyright © 2011-2022 走看看