【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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM