CDC,CPaintDC,CClientDC,CWindowDC区别
CDC,CPaintDC,CClientDC,CWindowDC區(qū)別
————————————————————————
1、首先,對(duì)DC進(jìn)行解釋一下:
Windows應(yīng)用程序通過(guò)為指定設(shè)備(屏幕,打印機(jī)等)創(chuàng)建一個(gè)設(shè)備描述表(Device Context, DC)在DC表示的邏輯意義的“畫布”上進(jìn)行圖形的繪制。DC是一種包含設(shè)備信息的數(shù)據(jù)結(jié)構(gòu),它包含了物理設(shè)備所需的各種狀態(tài)信息。Win32程序在繪制圖形之前需要獲取DC的句柄HDC,并在不繼續(xù)使用時(shí)釋放掉。?
2、然后,理順CDC的派生類關(guān)系:
CObject?
public |------CDC?
public |------|------CClientDC?
public |------|------CPaintDC?
public |------|------CWindowDC?
public |------|------CMetaFileDC?
(注意: 除CMetaFileDC以外的三個(gè)派生類用于圖形繪制.)?
3 、具體的區(qū)別,在下面:
CDC是Windows繪圖設(shè)備的基類
CClientDC:
(1)(客戶區(qū)設(shè)備上下文)用于客戶區(qū)的輸出,與特定窗口關(guān)聯(lián),可以讓開發(fā)者訪問(wèn)目標(biāo)窗口中客戶區(qū),其構(gòu)造函數(shù)中包含了GetDC,析構(gòu)函數(shù)中包含了ReleaseDC
CPaintDC:
(1)用于響應(yīng)窗口重繪消息(WM_PAINT)是的繪圖輸出。
(2)CPaintDC在構(gòu)造函數(shù)中調(diào)用BeginPaint()取得設(shè)備上下文,在析構(gòu)函數(shù)中調(diào)用EndPaint()釋放設(shè)備上下文。EndPaint()除了釋放設(shè)備上下文外,還負(fù)責(zé)從消息隊(duì)列中清除WM_PAINT消息。因此,在處理窗口重畫時(shí),必須使用CPaintDC,否則WM_PAINT消息無(wú)法從消息隊(duì)列中清除,將引起不斷的窗口重畫。
(3)CPaintDC也只能用在WM_PAINT消息處理之中。
CWindowDC:
(1)可在非客戶區(qū)繪制圖形,而CClientDC,CPaintDC只能在客戶區(qū)繪制圖形。
(2)坐標(biāo)原點(diǎn)是在屏幕的左上角,CClientDC,CPaintDC下坐標(biāo)原點(diǎn)是在客戶區(qū)的左上角。
(3)關(guān)聯(lián)一特定窗口,允許開發(fā)者在目標(biāo)窗口的任何一部分進(jìn)行繪圖,包含邊界與標(biāo)題,這種DC同WM_NCPAINT消息一起發(fā)送
說(shuō)明:在繪圖時(shí)推薦使用CClientDC,CPaintDC和CWindowDC對(duì)象,而不推薦直接使用CDC對(duì)象。
實(shí)例:
CClientDC *pDC = new CClientDC(this);
CWindowDC dc(this);
————————————————————————
Good Luck !
http://www.cnblogs.com/watsonlong/archive/2011/04/19/2021467.html
轉(zhuǎn)載于:https://blog.51cto.com/zhengdzy/1752976
總結(jié)
以上是生活随笔為你收集整理的CDC,CPaintDC,CClientDC,CWindowDC区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: JQuery中ajax的相关方法总结
- 下一篇: jetty NoSuchFieldErr