控制代碼的作用

2021-06-26 14:40:23 字數 1780 閱讀 2498



在<

<>(microsoft press,by richard wilton)一書中控制代碼的概念是這樣的:在windows環境中,控制代碼是用來標識專案的,這些專案包括:模組(module)、任務(task)、例項(instance)、檔案(file)、記憶體塊(block of memory)、選單(menu)、控制(control)、字型(font)、資源(resource),包括圖示(icon),游標(cursor),字串(string)等、gdi物件(gdi object),包括位圖(bitmap),畫刷(brush),元檔案(metafile),調色盤(palette),畫筆(pen),區域(region),以及裝置描述表(device context)。 

從上面的兩個定義中我們可以看到,控制代碼實際上是乙個識別符號,是用來標識物件或者專案的,控制代碼是乙個 32 位的正整數,microsoft® windows® 用它來識別窗體或其他物件,例如字型或位圖。應用程式幾乎總是通過呼叫乙個windows函式來獲得乙個控制代碼,之後其他的windows函式就可以使用這個控制代碼,以引用相應的物件。在windows程式設計中會用到大量的控制代碼,比如:hinstance(例項控制代碼),hbitmap(位圖控制代碼),hdc(裝置描述表控制代碼),hicon(圖示控制代碼)等等,這當中還有乙個通用的控制代碼handle。 

乙個windows應用程式可以用不同的方法獲得乙個特定項的控制代碼。許多api函式,諸如createwindow,globalalloc,openfile的返回值都是乙個控制代碼值。另外,windows也能通過應用程式的引出函式將乙個控制代碼作為引數傳送給應用程式,應用程式一旦獲得了乙個確定項的控制代碼,便可在windows環境下的任何地方對這個控制代碼進行操作。 

說的確切一點,控制代碼實際上是一種指向某種資源的指標,但與指標又有所不同:指標對應著乙個資料在記憶體中的位址,得到了指標就可以自由地修改該資料。windows並不希望一般程式修改其內部資料結構,因為這樣太不安全。所以windows給每個使用globalalloc等函式宣告的記憶體區域指定乙個控制代碼(本質上仍是乙個指標,但不要直接操作它),平時你只是在呼叫api函式時利用這個控制代碼來說明要操作哪段記憶體。當你需要對某個記憶體進行直接操作時,可以使用globallock鎖住這段記憶體並獲得指標來直接進行操作。 

「控制代碼」(handle),handle的本意是把柄,把手的意思。是你與作業系統打交道的東西。舉個例子:比如你做了虧心事(我說的是比如,呵呵),不幸讓我抓住了把柄,那麼我讓你做什麼你就得做什麼,因為你的把柄在我這。我們程式設計的時候也是這樣,比如我們要想操縱乙個視窗,那我們就必須「抓住它的把柄」,只有這樣,我們才能改變它的屬性,改變它的式樣,甚至銷毀它(狠了點兒)。我們再引用乙個通俗一點的例子,比如你考上了大學,入學後,學校(作業系統)會給你乙個學生證號。注意,這個號碼是學校指定的,你無法自選。有了這個號碼(學生證,假設一證多用)就可以享受學校提供的服務:如你就可以去圖書館借書,去食堂吃飯,去教室上課等等。但你不能到食堂裡買啤酒,因為學校不允許這種服務。而在計算機中系統提供的服務就是api呼叫,你有了handle,就可以理直氣壯地向系統提出呼叫api的服務。而指標的權力就大多了,有了指標你可以到處去喝酒,打架,學校(作業系統)管不著,所以控制代碼和指標的區別在於控制代碼只能呼叫系統提供的服務。而控制代碼雖然是乙個能相互區別的號碼,但與我們普通的id號又有區別,普通的id號是可以由程式設計師自己定義的,而控制代碼不行,它是物件生成時系統指定的,是為了區別系統中存在的各個物件,這個控制代碼不是由程式設計師賦給的。實際應用中,最常用的就是檔案控制代碼和視窗控制代碼。例如,視窗控制代碼的值是乙個長整數,每個窗體都用乙個控制代碼來表示。所以控制代碼是不會重複的,很多的函式都會用到窗體的控制代碼。 

到現在,我想你應該對「控制代碼」這個概念更加理解了吧,說歸說,這只是個人的理解,要想真正更深刻的理解,還是要去看一下msdn的解釋,那才是真正的權威 

控制代碼即GetSafeHwnd的作用

getsafehwnd 和getsafehandle 的主要區別 1.使用者不同 1 窗體使用 getsafehwnd 用於獲取窗體的安全控制代碼 即hwnd 有了hwnd我們就可以方便的對hwnd指向的窗體進行所需的操作了 2 gdi物件使用 getsafehandle 用於獲取gdi物件的控制代...

模組控制代碼(例項控制代碼)和控制代碼的區別

解釋一 1 模組的概念 乙個模組代表的是乙個執行中的exe檔案或dll檔案,用來代表這個檔案中所有的 和資源,磁碟上的檔案不是模組,裝入記憶體後執行時就叫做模組。乙個應用程式呼叫其他dll中的api時,這些dll檔案被裝入記憶體,就產生了不同的模組,為了區分位址空間中的不同模組,每個模組都有乙個惟一...

控制代碼 控制代碼工具 VC 獲取控制代碼

控制代碼 handle 是乙個用來標識物件的識別符號。windows之所以要設立控制代碼,根本上源於記憶體管理機制的問題,即虛擬位址。簡而言之資料的位址需要變動,變動以後就需要有人來記錄 管理變動,因此系統用控制代碼來記載資料位址的變更。在程式設計中,控制代碼是一種特殊的智慧型指標,當乙個應用程式要...