VC中CDC與HDC的區別以及二者之間的轉換
阿新 • • 發佈:2019-02-06
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 的轉化:
2007-05-09 12:04
方法一: 此方法在裝置結束時不會銷燬原來的資源(即: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);
回覆於 2004-04-08 17:46:03 得分 20
HDC hdc;
CDC cdc;
cdc到hdc
hdc = cdc.GetSafeHdc();
hdc到cdc
cdc.Attach(hdc)
回覆於 2004-04-08 17:49:14 得分 15
CDC 是MFC中的類
而HDC是Handle
使用
HDC GetDC()
回覆於 2004-04-08 17:51:49 得分 0
CDC cdc;
HDC hDC = cdc.m_hDC
回覆於 2004-04-08 17:54:20 得分 20
CDC dc;
HDC hDC = dc.m_hDC
dc.FromHandle(hDC);
回覆於 2004-04-08 18:01:51 得分 10
CDC to hdc
用成員變數m_hDC
hdc to CDC
用FromHandle
回覆於 2004-04-08 18:02:47 得分 10
dc.FromHandle(hDC)產生一個dc,但是是臨時的,mfc不保證系統在什麼時候刪除dc.
dc.Attach(hDC)是永久的,直到這個dc的生命正常結束。
回覆於 2004-04-08 18:05:21 得分 5
以上的都很對。你就查詢替換。將所有的(hdc,替換為pdc->(當然。前面宣告個
pdc就可以了。