CDC和HDC的區別與轉換

2021-08-01 09:44:36 字數 1703 閱讀 6765

**:

cdc和hdc的區別與轉換

一、區別與聯絡

hdc是控制代碼;cdc是mfc封裝的windows   裝置相關的乙個類;cclientdc是cdc的衍生類,產生對應於windows客戶區的物件

hdc是windows的一種資料型別,是裝置描述控制代碼。

而cdc是mfc裡的乙個類,它封裝了幾乎所有的關於hdc的操作。   

也可以這樣說,hdc定義的變數指向一塊記憶體,這塊 記憶體用來描述乙個裝置的相關的內容,所以也可以   認為hdc定義的是乙個指標;而cdc類定義乙個物件,   這個物件擁有hdc定義的乙個裝置描述表,同時也包   含與hdc相關的操作的函式。   

這與hpen和cpen,point與cpoint之間的差別是一樣的。

二、獲得cdc *

cdc* pdc

pdc=getdc();

三、獲得hdc

hdc hdc;

1,hdc=getdc(pcxp->hwnd);

2,pdc->m_hdc;

3,memdcxp mdcxp;

getmemdcxp(&mdcxp);

hdc = mdcxp.hmemdc;

4,hdc=::getdc(hwnd handle)

四、轉換

cdc* pdc

hdc hdc;

pdc=attach(hdc);

hdc=getsafehdc(pdc);

pdc->m_hdc==hdc

cdc、hdc、pdc

1.cdc *pdc和hdc hdc有什麼不同,類似的有cwnd *pwnd和hwnd?

pdc是類指標

hdc是windows控制代碼

通過pdc獲得hdc:

hdc hdc=pdc->getsafehdc();

通過hdc獲得pdc:

cdc *pdc=new cdc;

pdc->attach(hdc);

2.hdc和cdc有本質區別

hdc是windows的一種資料型別,是裝置描述控制代碼。而cdc是mfc裡的乙個類,它封裝了幾乎所有的關於hdc的操作。也可以這樣說,hdc定義的變數指向一塊記憶體,這記憶體用來描述乙個裝置的相關的內容,所以也可以認為hdc定義的是乙個指標;而cdc類定義乙個物件,這個物件擁有hdc定義的乙個裝置描述表,同時也包含與hdc相關的操作的函式。這與hpen和cpen,point與cpoint之間的差別是一樣的。

cdc是對hdc的相關操作進行封裝,例如cdc的乙個textout函式隱去其錯誤檢測,完全可以簡化到這樣程度cdc:textout( int x, int y, const cstring& str )

m_hdc就是cdc的成員變數hdc m_hdc;

cdc有乙個operator hdc() const   

你可以把它當成乙個hdc使用

3.this是dc輸出目標視窗的指標,通過它可以得到視窗控制代碼,物件帶參構造這有什麼奇怪的呢?   

cpaintdc        無效區dc,相當於beginpaint,    endpaint   

cclientdc       客戶區dc,相當於getdc,         releasedc   

cwindowdc       整視窗dc, 相當於getwindowdc,   releasedc   

cdc             任何dc,   相當於createdc,      deletedc

CDC和HDC的區別與轉換

cdc和hdc的區別與轉換 一 區別與聯絡 hdc是控制代碼 cdc是mfc封裝的windows 裝置相關的乙個類 cclientdc是cdc的衍生類,產生對應於windows客戶區的物件 hdc是windows的一種資料型別,是裝置描述控制代碼。而cdc是mfc裡的乙個類,它封裝了幾乎所有的關於h...

HDC與CDC相互轉換

首先說一下什麼是dc 裝置描述表 windows應用程式通過為指定裝置 螢幕,印表機等 建立乙個裝置描述表 device context,dc 在dc表示的邏輯意義的 畫布 上進行圖形的繪製。dc是一種包含裝置資訊的資料結構,它包含了物理裝置所需的各種狀態資訊 win32程式在繪製圖形之前需要獲取d...

HDC與CDC相互轉換

首先說一下什麼是dc 裝置描述表 windows應用程式通過為指定裝置 螢幕,印表機等 建立乙個裝置描述表 device context,dc 在dc表示的邏輯意義的 畫布 上進行圖形的繪製。dc是一種包含裝置資訊的資料結構,它包含了物理裝置所需的各種狀態資訊 win32程式在繪製圖形之前需要獲取d...