CClientDC和CDC的區別

2022-05-06 01:09:09 字數 1448 閱讀 5020

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

cdc是mfc封裝的windows 裝置相關的乙個類;

cclientdc是cdc的衍生類,產生對應於windows客戶區的物件,在構造的時候呼叫getdc,在析構的時候呼叫releasedc;

cwindowdc也是cdc的衍生類,在構造的時候呼叫getwindowdc,在析構時呼叫releasedc,可訪問cwnd的整個螢幕,包括客戶去和非客戶區。

以畫線為例,上面幾種dc的使用**如下:

hdc hdc; hdc = ::getdc(m_hwnd); movetoex(hdc,m_ptorigin.x,m_ptorigin.y,null); lineto(hdc,point.x,point.y); ::releasedc(m_hwnd,hdc);

cdc * pdc = getdc();pdc->moveto(m_ptorigin);pdc->lineto(point);releasedc(pdc);

cclientdc dc(this);cclientdc dc(getparent());dc.moveto(m_ptorigin);dc.lineto(point);

//cwindowdc dc(this);//this代表只能在view區域繪畫//cwindowdc dc(getparent());//在整個frame區域繪畫cwindowdc dc(getdesktopwindow());//可在整個桌面區域繪畫dc.moveto(m_ptorigin);dc.lineto(point);

-------

cdc是windows繪圖裝置的基類 cclientdc: (1)(客戶區裝置上下文)用於客戶區的輸出,與特定視窗關聯,可以讓開發者訪問目標視窗中客戶區,其建構函式中包含了getdc,析構函式中包含了releasedc

cpaintdc: (1)用於響應視窗重繪訊息(wm_paint)是的繪圖輸出。 (2)cpaintdc在建構函式中呼叫beginpaint()取得裝置上下文,在析構函式中呼叫endpaint()釋放裝置上下文。endpaint()除了釋放裝置上下文外,還負責從訊息佇列中清除wm_paint訊息。因此,在處理視窗重畫時,必須使用cpaintdc,否則wm_paint訊息無法從訊息佇列中清除,將引起不斷的視窗重畫。 (3)cpaintdc也只能用在wm_paint訊息處理之中。

cwindowdc: (1)可在非客戶區繪製圖形,而cclientdc,cpaintdc只能在客戶區繪製圖形。 (2)座標原點是在螢幕的左上角,cclientdc,cpaintdc下座標原點是在客戶區的左上角。 (3)關聯一特定視窗,允許開發者在目標視窗的任何一部分進行繪圖,包含邊界與標題,這種dc同wm_ncpaint訊息一起傳送

說明:在繪圖時推薦使用cclientdc,cpaintdc和cwindowdc物件,而不推薦直接使用cdc物件。

例項: cclientdc *pdc = new cclientdc(this);

cwindowdc dc(this);

CPaintDC和CClientDC的區別

1 cclientdc 客戶區裝置上下文 用於客戶區的輸出,它在建構函式中封裝了getdc 在析構函式中封裝了releasedc 函式。一般在響應非視窗重畫訊息 如鍵盤輸入時繪製文字 滑鼠繪圖 繪圖時要用到它。用法是 cclientdcdc this this一般指向本視窗或當前活動檢視 dc.te...

CDC和HDC的區別與轉換

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

CDC和HDC的區別與轉換

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