裝置描述表DC

2021-06-04 18:11:58 字數 2494 閱讀 1984

win32下獲取dc的

api函式有:

hdc beginpaint(hwnd hwnd, lppaintstruct lppaint):特定用於wm_paint訊息

hdc getdc(hwnd hwnd):用於獲得hwnd

引數所指定視窗的客戶區域的hdc。

hdc getwindowdc(hwnd hwnd):返回hwnd

引數所指定的視窗的

hdc,包括非客戶區,如標題欄、選單、滾動條,以及邊框等。hwnd

為null

時,獲取整個螢幕的

hdc。

mfc對上述

hdc物件和

win32

函式進行了封裝,基類為

cdc類。cdc類包含了各種win32 hdc

的全部功能。在mfc下,使用cdc的成員函式進行圖形繪製和文字輸出。

cdc類有兩個成員變數:m_hdc,m_hattribdc,它們都是windows

裝置描述表控制代碼。

cdc的成員函式作輸出操作時,使用

m_hdc

;要獲取裝置描述表的屬性時,使用

m_hattribdc

。在建立乙個

cdc類例項時,預設的

m_hdc

等於m_hattribdc。

cdc在封裝

win32

函式selectobject(hdc hdc

,hgdiobject hgdiobject)時,採用了過載技術,即它針對不同的

gdi物件,提供了如下名同而引數不同的成員函式:

selectobject(cpen *pen)		//用於選入筆

selectobject(cbitmap* pbitmap) //用於選入位圖

selectobject(crgn *prgn) //用於選入剪裁區域

selectobject(cbrush *pbrush) //用於選入刷子

selectobject(cfont *pfont) //用於選入字型

selectpalette(cpalette *ppalette,bool bforcebackground ) //選入調色盤到dc

realizepalletter() //實現邏輯調色盤到物理調色盤的對映

直接使用cdc

的例子是記憶體裝置上下文,例如:

cdc dcmem.createcompatibledc(&dc);			//建立裝置描述表

cdc pbmold = dcmem.selectobject(&m_bmball); //更改裝置描述表屬性

//作一些繪製操作

dcmem.selectobject(pbmold); //恢復裝置描述表的屬性

dcmem.deletedc(); //可以不呼叫,而讓析構函式去刪除裝置描述表

從cdc 

派生出四個功能更具體的

dc類。繼承層次如下圖所示:

下面分別討論這四種裝置描述表。

l ccientdc:代表視窗客戶區的裝置描述表。其建構函式cclientdc(cwnd *pwin)

通過::getdc

獲取指定視窗的客戶區的裝置描述表

hdc,並且使用成員函式attach把它和cclientdc

物件**在一起;其析構函式使用成員函式detach把裝置描述表控制代碼hdc

分離出來,並呼叫

::releasedc

釋放裝置描述表

hdc。

l cpaintdc:僅僅用於響應wm_paint訊息時繪製視窗,因為它的構造函式呼叫了::beginpaint

獲取裝置描述表

hdc,並且使用成員函式attach把它和cpaintdc

物件**在一起;析構函式使用成員函式detach把裝置描述表控制代碼hdc

分離出來,並呼叫

::endpaint

釋放裝置描述表

hdc,而

::beginpaint

和::endpaint

僅僅在響應

wm_paint

時使用。

例如,mfc

中cview

對wm_paint

訊息的實現方法如下:

void cview::onpaint()

l cmetafiledc:用於生成元檔案。

cwindowdc:代表整個視窗區(

包括非客戶區

)的裝置描述表。其建構函式

cwindowdc(cwnd *pwin)

通過::getwindowdc

獲取指定視窗的客戶區的裝置描述表

hdc,並使用attach把它和cwindowdc

物件**在一起;其析構函式使用detach把裝置描述表hdc

分離出來,呼叫

::releasedc

釋放裝置描述表

hdc。

DC裝置描述符表

dc device context 即 裝置描述符表 裝置環境 裝置上下文 這些都是它的名字。是乙個資訊結構體,包含物理輸出裝置及其驅動程式。在windows平台下,所有的的圖形操作都是通過它完成。在mfc中,乙個dc device context 是乙個結構體,它定義了圖形物件的引數設定以及它們的...

裝置描述表。

通常在呼叫getdc和beginpaint時,系統用裝置描述表的預設屬性建立乙個dc,使用設定裝置描述表後,不會儲存屬性,下次還得重新設定。如果要儲存,需要設定視窗屬性為 cs owndc,這樣只需要設定一次裝置描述表屬性就可以了。當然,這個只針對getdc和beginpaint返回的dc。裝置描述...

OnLButtonDown與裝置描述表

nflags 表示控制鍵狀態 包括 ctrl,shift,滑鼠左 中 右 共5個鍵的狀態 point表示滑鼠座標。相對於當前視窗而言的座標 1裝置描述表概述 當windows要在顯示器或其他裝置上繪製圖形或文字時,其不像dos系統把影象和文字直接輸出到硬體,而是使用乙個裝置描述表來替代硬體裝置的邏輯...