對控制代碼的認識

2021-04-01 16:47:15 字數 1886 閱讀 9872

之前在編寫mfc程式的時候,有時會碰到控制代碼這一概念,由於對它一直不是很重視,所以並沒有主動去了解它.隨著不斷深入學習mfc,特別是看完候先生的《深入淺出mfc>>後,對控制代碼的實質產生了很大的興趣,於是到處收集資料,現在總結一下.

handle的中文意思主要有多種,一種是作為名詞:柄,把柄;一種是作為動詞:處理.硬要從中文意思來說的話,這兩種中文意思都可以用來勉強解釋控制代碼.例如乙個鍋的手柄,你只要抓住了它,你就可以很好地操作那個鍋,不過很明顯你只能通過鍋的手柄來做一些諸如炒菜之類的事,你不可能是因為抓住了鍋的手柄才能去看電視.不能的物體都會至少有乙個屬於它的"手柄".在mfc裡面,有很多物件,例如對話方塊,視窗,畫筆,顯示器,印表機等,每個物件都會產生乙個屬於它自己的控制代碼.oh!慢著,似乎還沒說清楚控制代碼的本質,下面再作詳細的解說吧.

如果檢視各種handle的定義,如hdc,hpen,hinstance等等,你會發現有這樣乙個宣告:

declare_handle(hdc);

再把declare_handle這個巨集展開來看一下:

#define declare_handle(name) struct name##__ ; typedef struct name##__ *name

這是什麼意思?用hdc替換上面的name來看看,我們就得到了下面的一段**:

struct hdc__

int unused;

typedef struct hdc__ *hdc

oh,原來控制代碼就是乙個指向某一結構的指標,這個結構體只有乙個成員,它是乙個整數(不知為什麼ms要把這個成員叫做unused,難道真的沒有用嗎?).

嗯,我們再看乙個handle的定義,在winnt.h標頭檔案中,我們看到了handle的定義:

typedef pvoid handel;

pvoid是什麼?再看它的定義:

typedef void *pvoid;

真相出來了,原來handle不過是乙個指向void型,即無型別的指標,嗯,目前的指標是32位的吧.其實也不能說handle是一種指標,它只充當一種索引的作用.真的很難解釋handle是什麼,再往下看看,只能意會吧,呵呵.

知道了handle的本質(乙個32位的整數,用16進製表示),再來說說handle的作用.看我前面第二段的例子,你可以了解到為了控制乙個物體,你需要找到它的"手柄".handle就是充當win32下各種"物體"的"手柄".事實上,很多windows api都需要乙個handle作為輸入引數,這是因為api需要和一些你看不見的物件打交道,這些物件是不能被你所移動或修改的,所以不能給你乙個指標來對它進行操作.oh,指標的確是個好東西,它所擁有的能力實在太強大了,但所謂能力越大,責任越大,使用指標的時候千萬要小心,不然會造成毀滅性的錯誤.所以,為了安全,還是給你乙個handle吧,通過這個handle,你就可以對那些物件進行一些處理.handle在這裡充當什麼角色呢?應該算是乙個中間人吧,handle是固定的,它不會變,但是物件的位址會變,當物件在記憶體中的位置發生改變後,我們不能通過之前的物件指標找到物件,怎麼辦呢?嗯,這時候handle的用處就出來了,handle就是用來記錄物件的最新位址的.有點明白了吧?換一種說法吧,嗯,其實就是你知道handle在**,但你不知道物件在**,而handle知道物件在**,所以,只要你知道了handle在**,你就能找到物件(儘管你還是不知那個物件住在記憶體的哪個地方,不過找到它就行了,不是嗎?).嗯,是不是有點像索引的作用呢?為什麼不給我們知道物件在記憶體中的位置呢?呵呵,作業系統怕你對它進行一些不利的操作啊.反正你通過handle能讓物件做它應該做的事,這就足夠了.這就是封裝吧,ms最喜歡做的事情,呵呵.

其實對於handle的定義,ms公司也不能說得清清楚楚,把handle翻譯成控制代碼也是不太合適的,但有時就是這樣,英文能理解的東西,翻譯到中文反而就混亂了,所以"控制代碼"這個名詞比較適合初學者,如我.那些有豐富程式設計經驗的人一定不喜歡使用"控制代碼"這個名詞吧,還是用handle這個原版英文單詞比較容易理解.

對控制代碼的認識

之前在編寫mfc程式的時候,有時會碰到控制代碼這一概念,由於對它一直不是很重視,所以並沒有主動去了解它.隨著不斷深入學習mfc,特別是看完候先生的 深入淺出mfc 後,對控制代碼的實質產生了很大的興趣,於是到處收集資料,現在總結一下.handle的中文意思主要有多種,一種是作為名詞 柄,把柄 一種是...

對控制代碼的認識

之前在編寫mfc程式的時候,有時會碰到控制代碼這一概念,由於對它一直不是很重視,所以並沒有主動去了解它.隨著不斷深入學習mfc,特別是看完候先生的 深入淺出mfc 後,對控制代碼的實質產生了很大的興趣,於是到處收集資料,現在總結一下.handle的中文意思主要有多種,一種是作為名詞 柄,把柄 一種是...

對控制代碼的理解

從廣義上,能夠從乙個數值拎起一大堆資料的東西都可以叫做控制代碼。控制代碼的英文是 handle 本義就是 柄 只是在電腦科學中,被特別地翻譯成 控制代碼 其實還是個 柄 從乙個小東西拎起一大堆東西,這難道不像是個 柄 嗎?然後,指標其實也是一種 控制代碼 只是由於指標同時擁有更特殊的含義 實實在在地...