mfc中我定義物件cclientdcdcthis然後想

2021-03-24 18:17:51 字數 5608 閱讀 2041

1樓:孤鬆獨海

這個mfc有bug,有時候後面不出來,你關閉了工程重新開啟就會出現了。

2樓:地球9號

刪除工程下.ncb檔案,不過可能還會再次出現此問題,只能反覆刪除。

3樓:匿名使用者

你裝個vc 助手。。很方便的~

cclientdc dc(this);語句中的dc是自己定義的還是cclientdc中本就定義好的成員函式?

4樓:匿名使用者

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);

cclientdc dc(this);中的dc(this)是什麼意思? 20

5樓:quick快

this顧名思意就是這麼,相當於一個本類的指標,省下你自己定義了。不光是cclientdc dc(this);你還可以this->看一下,你會發現你在本類中定義的函式變數都在。至於dc(this)的形式,是為了傳遞一個控制代碼給dc。

既然有dc,所以你必然是定義的視窗類,因此this也可以說是你所定義的視窗類的指標。

關於mfc中的cclientdc的問題

6樓:夜來雨早來晴

this是在視窗類內獲取本視窗指標的方法.

無論在**需要dc,首先要獲取已存在的視窗指標(或控制代碼專)屬,才能獲取dc.括號裡面,就是視窗指標.

在mfc中,有多種框架內獲取視窗指標的方法,這要看你在什麼位置,需要獲取什麼視窗的指標.

常用函式包括:

afxgetmainwnd();//獲取主框架視窗

mdigetactive()->getactiveview;//框架視窗獲取多文件的當前檢視

getactivedocument()->getfirstviewposition() / getnextview() //通過文件獲取檢視視窗。

7樓:匿名使用者

getdc之後要releasedc,

create***patibledc之後需要deletedccclientdc dc(this);

系統會自動**的 不用進行刪除

8樓:匿名使用者

cclientdc 的解構函式自動幫你呼叫釋放掉了,你不用顯示呼叫...否則,兩遍...

cclientdc dc(this);中的dc(this) 是什麼意思? 10

9樓:匿名使用者

cclientdc dc(this),這句就是用cclientdc的一個帶cwnd指標

型別引數的建構函式來生成一個名字是dc的例項而已,沒什麼特別的啊。

getdlgitem(idc_static_01)這句用來獲得id是idc_static_01的控制元件的控制代碼,而在你的程式中,已經知道這個控制元件是個靜態標籤,所以可以直接用(cstatic *)將這個控制代碼轉換成靜態標籤控制元件的控制代碼。

另外,所有控制元件、視窗、框架的類都是由cwnd類繼承來的,所以都可以作cclientdc dc_i()這個括號中的引數。

10樓:匿名使用者

很顯然,它是一個變數名。一個物件。

你想問的可能是cclientdc,它代表了當前的客戶區,用dc(this)這個方法,建立了一個物件。

然後用dc可呼叫很多函式。

11樓:

direct control直接控制?

vs2008 mfc 中用cclientdc 定義一個物件為什麼提示找不到合適的建構函式?

12樓:火駒

cclientdc(cwnd* pwnd); 建構函式有1個引數是cwnd*指標。

若在檢視類中,這樣寫

cclientdc dc(this);

13樓:匿名使用者

cclientdc建構函式要傳一個cwnd指標

cclientdc dc(this); 裡頭的 this 是什麼意思啊?

14樓:匿名使用者

你這**的意思是,當滑鼠左鍵按下的時候,獲取當前視窗的無效區域.62616964757a686964616fe58685e5aeb931333332393362

從以上字面理解.既然是要獲取一個視窗的無效區域,首先你得有一個視窗是不?哪個視窗呢,就是你這個cmyview類的視窗.這個類派生自cwnd類,所以他是一個視窗類.既然我們已經知道了是哪個視窗,總得要通知程式(這裡其實是裝置上下文物件)我要獲取的就是這個視窗的無效區域.在windows中代表一個視窗的東西就是控制代碼 hwnd這個東西.每一個這個東西指向一個視窗,當視窗產生的時候,也就是使用create建立視窗的時候會返回一個hwnd.這個hwnd就代表了這個視窗,就跟一個指標差不多.在c++中控制代碼被類封裝,換句話說,每一個派生自cwnd的視窗類都擁有一個自己的m_hwnd成員,這個成員儲存了該類定義出來的物件所代表的視窗的控制代碼,再簡單一點說,找到這個類成員,也就是找到了這個控制代碼,找到了這個控制代碼,也就是找到了這個視窗.而this是一個指向類自身的指標.如果你c++**學過,那麼你應該明白,有了一個指向物件的指標,那麼自然也就找到了這個物件.

cclientdc dc(this);建立裝置上下文物件,dc.getclipbox(rect)用於獲取一個視窗的無效區域.哪個視窗?this指向的物件所代表的視窗.每一個物件儲存一個m_hwnd成員,指向這個物件建立出來的視窗.當你呼叫dc(this)的時候,類內部會自動將這個m_hwnd成員交給裝置上下文.所以這裡的this其實就是傳遞自身,為了獲取自身物件內的m_hwnd以便得到所要操作的是哪個視窗.

如果你還不明白,那就不要追問了

場地豎向中我想要定義道路標高,但是定義完成發現卻是場地標高

定義的標高類 型是和 標高設定 中設定的當前標高型別關聯的。如果當前的標高型別是場地標高,那麼後面的標高定義等命令都是針對於場地標高進行的。想要定義道路標高,必須在 標高設定 中設定當前的標高型別為道路標高 鴻業總圖fps8.0在 三維 下拉選單中定義道路中心線,需要滿足什麼條件?目前道路標高資料必...

我畢業工作後三四年,感覺找物件反正都是在中國找,反正都是隻能找中國人,感覺找什麼樣的其實都差不多

或許年輕吧 才有校園失戀 年輕的衝動 不願意承認事實 固執的執著 才導致失敗吧 國人講究 門當戶對 條件相當 外貌固然喜愛 卻在前兩者之後 除非你的能力蓋過了前兩者 隨你挑選更容易些 遵從國人講究 承認事實 也要認清事實 人家不願意 再固執也沒有用 兩情相悅才是感情發展的基礎 而經濟基礎才是維持長久...

高中生物中擴散的定義是什麼? 我記得擴散是從高濃度到低濃度的

擴散是指物質跨膜運輸的方式,分為自由擴散和協助擴散,都是由高濃度到低濃度進行 滲透作用是指水分子由低濃度溶液向高濃度溶液滲透的過程,比如那個質壁分離作用 這倆指的不是一回事 高中生物 為什麼被動運輸是高濃度流向低濃度呢?被動運輸之所以能運輸,就是因為有濃度差,由於一側濃度高,另一側低,所以被運輸的物...