VC中CDC HDC pDC區別與聯絡及相互轉換

2022-09-26 11:48:15 字數 1728 閱讀 2258

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 &www.cppcns.comn程式設計客棧bsp;      無效區dc,相當於beginpaint,    endpaint  

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

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

cdc             任何dc,   相當於createdc,      deletedc

四、區別與聯絡

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

本文標題: vc中cdc、hdc、pdc區別與聯絡及相互轉換

本文位址:

VC中 T 與L區別

一說這個話題,肯定涉及ms的字符集,先看ms對 t 其中 text 與 t 一樣 的定義 define t x t x define text x t x 如果定義了 unicode識別符號,那麼乙個稱作 t的巨集就定義如下 define t x l x如果沒有定義 unicode識別符號,則 t巨...

vc中bool與BOOL的區別

bool是微軟定義的typedef int bool。與bool不同,它是乙個三值邏輯,true false error,返回值為大於零的整數為true,0為false,1為error。win32 api中很多返回值為bool的函式都是三值邏輯。比如getmessage bool是標準c 資料型別,...

VC中HDC與CDC的區別

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