cclientdc dc this 語句中的dc是自己定義

2021-04-03 05:56:06 字數 2796 閱讀 8746

1樓:匿名使用者

cpaintdc、cclientdc、cwindowdc和cmetafiledc類的主要特點及區別

1、 裝置環境(dc)

(1)在windows中,顯示工作是基於裝置環境的。所謂裝置環境(dc)是一種windows資料結構,該結構包含應用程式裝置輸出時所需要的資訊。

(2)在使用任何繪圖函式之前必須建立一個裝置環境物件。

(3)在visual c++ 6.0的mfc中提供了裝置環境類cdc,它封裝了繪圖所需要的所有函式,其中包括了大多數的windows api中的gdi函式。

2、 裝置環境類

2.1. cdc類

(1)cdc類是cobject類的派生類,也是所有裝置環境類的基類。cdc類定義了一個裝置描述物件,並提供了對裝置描述物件進行操作的成員函式以及對與視窗客戶區有關的顯示區進行操作的成員函式。

(2)cdc類提供的成員函式可以用於操作裝置描述物件、使用繪圖工具、選擇圖形裝置介面,以及操作顏色和調色盤,還用於取得和設定繪圖屬性、對映方式、檢視和視窗範圍的操作、座標的轉換、區域的使用、剪取、畫線以及繪製圖形和文字等操作。

2.2. cpaintdc類

(1)cpaintdc類是cdc類的一個派生類,該類一般用在響應wm_paint訊息的函式onpaint()中。

(2)wm_paint訊息是當視窗的某個區域需要重畫時激發的視窗訊息。當程式中的訊息迴圈接到wm_paint訊息時就自動呼叫訊息處理函式onpaint(),如果在onpaint函式內定義了cpaintdc類的物件,通過這個類物件就可以使用cdc類的成員函式完成檢視客戶區中的圖形繪製操作。

(3)cpaintdc用於響應視窗重繪訊息(wm_paint)時的繪圖輸出。cpaintdc在建構函式中呼叫beginpaint()取得裝置上下文,在解構函式中呼叫endpaint()釋放裝置上下文。endpaint()除了釋放裝置上下文外,還負責從訊息佇列中清除wm_paint訊息。

因此,在處理視窗重畫時,必須使用cpaintdc,否則wm_paint訊息無法從訊息佇列中清除,將引起不斷的視窗重畫。cpaintdc也只能用在wm_paint訊息處理之中。

2.3. cclientdc類

cclientdc類也是cdc類的派生類。它只能在視窗的客戶區(即視窗中除了邊框、標題欄、選單欄以及狀態列外的中間部分)中進行繪圖,座標點(0,0)通常指的是客戶區的左上角。它的建構函式呼叫gegdc函式,而解構函式呼叫releasedc函式。

cclientdc(客戶區裝置上下文)用於客戶區的輸出,它在建構函式中封裝了getdc(),在解構函式中封裝了releasedc()函式。一般在響應非視窗重畫訊息(如鍵盤輸入時繪製文字、滑鼠繪圖)繪圖時要用到它。用法是:

cclientdc dc(this);//this一般指向本視窗或當前活動檢視

dc.textout(10,10,str,str.getlength());

//利用dc輸出文字,如果是在cscrollview中使用,還要注意呼叫onpreparedc(&dc)調整裝置上下文的座標。

2.4. cwindowdc類

cwindowdc類也是cdc類的派生類。其成員函式可以在視窗的客戶區和非客戶區(即視窗的邊框、標題欄、選單欄以及狀態列)中繪圖,座標點(0,0)是指整個螢幕的左上角。同cclientdc類一樣,它的建構函式呼叫gegdc函式,而解構函式呼叫releasedc函式。

2.5. cmdtafiledc類

cmetafiledc類提供了一個面向windows圖元檔案的裝置環境,封裝了在一個windows圖元檔案中繪圖的方法。圖元檔案是一個與裝置無關的**的集合,由於它對影象的儲存比畫素更精確,因而往往在要求較高的場合下使用,例如autocad的圖形儲存等。

3、幾個裝置環境類的主要差別

3.1. cwindowdc類與cpaintdc 、cclientdc類的區別

其區別主要有以下兩個方面:

(1)用cpaintdc 和cclientdc類的物件繪製圖形時,繪製區只能在客戶區,而不能在非客戶區;而cwindowdc類既可以在視窗的客戶區也可以在非客戶區進行圖形繪製。

(2)在cwindowdc繪圖類下,座標系是建立在整個螢幕上的,在畫素座標方式下,座標原點在螢幕的左上角;而在cpaintdc和cclientdc繪圖類下,座標系是建立在客戶區上的,在畫素座標方式下,座標原點在客戶區的左上角。

3.2. cpaintdc類與cclientdc類的區別

cpaintdc類的物件應用在onpaint函式中,以響應windows的wm_paint訊息;而cclientdc類的物件應用在非響應訊息wm_paint的情況下。

cpaintdc類響應wm_paint訊息,並自動完成繪製,這對維護圖形的完整性有著重要的作用。cclientdc類可以實時地將圖形繪製到螢幕上,不需要重畫;而如果用cpaintdc類的物件完成同樣的工作,只能發出訊息讓螢幕上包含這條直線的區域重畫,以把這條直線繪製到螢幕上。

4、裝置環境類的使用方法

4.1. cdc類

因為cdc類不能用視窗物件指標初始化物件,所以,一般不直接定義物件。

4.2. cpaintdc類

cpaintdc 類一般用在視窗類onpaint函式中,可採用如下**定義一個cpaintdc類物件:

cpaintdc dc(this);

以上**定義了一個cpaintdc類的物件dc,並用當前的視窗物件指標this對物件進行了初始化。cclientdc和cwindowdc類也採用這樣的方法。

4.3. cclientdc類

可利用以下**定義一個物件:cclientdc dc(this);

4.4. cwindowdc 類

利用以下**建立一個cwindowdc類的物件:cwindowdc dc(this);

下列給出的賦值語句中正確的是A4MB

根據賦值語句的一般格式是 變數 表示式 賦值語句的左邊只能是變數名稱而不能是表示式,右邊可以是數也可以是表示式,左右兩邊不能互換,故選d.下列給出的賦值語句中,表達正確的是 a.4 x b.x x c.x y 3 d.x y a 4 x中,賦值號的左邊是常量,故a錯誤 c x y 3中,賦值語句不能...

以下賦值語句中合法的是A x2,y3 B x y 3 C x2 y3 D

書寫合格的程式 是進行程式設計的根本。只有熟練地掌握了這些內容回,在以後的程式設計中才答不會捉襟見肘。程式設計的語法就和我們平時說話一樣,是採用大家公認的詞彙以及詞彙的組織規則來表達自己。vb的程式 由語句 常數和宣告等部分組成,使用最為頻繁的語句就是賦值語句。使用賦值語句可以在程式執行的過程中改變...

配眼鏡之後怎樣辨別鏡片是自己定的哪種型號

臉型與眼鏡搭配技巧 1 橢圓臉型 適合 各種造型的鏡架 橢圓型臉回 又稱鵝蛋臉,是非常符答合東方人審美標準的美女臉型。如果您有這樣的臉形,恭喜您,您配戴各種鏡架都比較合適,只需要注意鏡架的大小應與臉的大小成比例就可以了。特別是女性橢圓臉型,宜選配任何款式的鏡架,但最好不用直線條鏡架,也就是太高太扁的...