【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就可以了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章