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系統把影象和文字直接輸出到硬體,而是使用乙個裝置描述表來替代硬體裝置的邏輯...