HDC,CDC,CClientDC的區別和聯絡是什麼?

xringm發表於2016-03-29

簡而言之,HDC是控制程式碼;CDC是MFC封裝的Windows 裝置相關的一個類;CClientDC是CDC的衍生類,產生對應於Windows客戶區的物件

CDC類是MFC為了實現GDI功能專門封裝的一個類,而且它是基類,由它派生出的類有CWindowDC、CClientDC 的等等,因而他們是繼承的關係,CClientDC專門用來繪製視窗或者控制元件的客戶區

 

pDC 是 類指標 
HDC 是 windows控制程式碼 
通過pDC獲得hdc: 
HDC hdc=pDC->GetSafeHdc(); 
通過hdc獲得pDC: 
CDC *pDC=new CDC; 
pDC->Attach(hdc);

 

HDC是WINDOWS的一種資料型別,是裝置描述控制程式碼。 
而CDC是MFC裡的一個類,它封裝了幾乎所有的關於 
HDC的操作。 
也可以這樣說,HDC定義的變數指向一塊記憶體,這塊 
記憶體用來描述一個裝置的相關的內容,所以也可以 
認為HDC定義的是一個指標;而CDC類定義一個物件, 
這個物件擁有HDC定義的一個裝置描述表,同時也包 
含與HDC相關的操作的函式。 
這與HPEN和CPen,POINT與CPoint之間的差別是一樣

  CPaintDC     dc(this) 

 CDC*   pDC=GetDC()  ;
  CClientDC   dc(this) ;

CClientDC *pDC=new CClientDC(this); 

析構與定義時的區別:

HDC hscrDC=CreateDC("DISPLAY",NULL,NULL,NULL);

HDC compatDC=CreateCompatibleDC(hscrDC);

DeleteDC(hscrDC);

DeleteDC(hscrDC);

CClietDC *pDC=new CClientDc(this);

(  定義二 :CDC *pDC=GetDC();)

(   定義三://CCLient dc(this);     )

CDC memDC;

memDC.CreateCopatibleDC(pDC);

(   //memDC.CreateCompatible(&dc);   )

delete pDC;

(   //dc.deleteObject();)

memDC.DeleteDC();

 

注意畫筆,畫刷的析構

CPen pen;

pen.DeleteObject():

 

相關文章