極速下載站 —— 提供優(yōu)質(zhì)軟件下載服務(wù),感受全新的極速下載體驗(yàn)!

最近更新 | 軟件專題 | 軟件分類 | 軟件排行

您的位置:極速下載站資訊首頁(yè)系統(tǒng)教程系統(tǒng)資訊 → 窗口句柄詳細(xì)簡(jiǎn)介

窗口句柄詳細(xì)簡(jiǎn)介

時(shí)間:2019-10-04 14:23:10  作者:無(wú)名  瀏覽量:56

大家好,今天小編給大家分享一下在Windows中,句柄是一個(gè)體系內(nèi)部數(shù)據(jù)結(jié)構(gòu)的引證。例如當(dāng)你操作一個(gè)窗口,或說(shuō)是一個(gè)Delphi窗體時(shí),體系會(huì)給你一個(gè)該窗口的句柄,體系會(huì)告訴你:你正在操作142號(hào)窗口,就此你的應(yīng)用程序就能要求體系對(duì)142號(hào)窗口進(jìn)行操作——移動(dòng)窗口、改動(dòng)窗口巨細(xì)、把窗口最小化等等。實(shí)際上許多Windows API函數(shù)把句柄作為它的第一個(gè)參數(shù),如GDI(圖形設(shè)備接口)句柄、菜單句柄、實(shí)例句柄、位圖句柄等,不僅僅局限于窗口函數(shù)。換句話說(shuō),句柄是一種內(nèi)部代碼,通過(guò)它能引證受體系控制的特別元素,如窗口、位圖、圖標(biāo)、內(nèi)存塊、光標(biāo)、字體、菜單等。
窗口句柄詳細(xì)簡(jiǎn)介
窗口句柄詳細(xì)簡(jiǎn)介圖1
概念
單從概念上講,句柄指一個(gè)目標(biāo)的標(biāo)識(shí),而指針是一個(gè)目標(biāo)的內(nèi)存首地址。從實(shí)際處理的角度講,即能夠把句柄界說(shuō)為指針,又能夠把它界說(shuō)為同類目標(biāo)數(shù)組的索引,這兩種處理辦法都有優(yōu)缺點(diǎn),至于選用哪種方式,完全應(yīng)該看實(shí)際需求,這能夠說(shuō)是一種程序設(shè)計(jì)上的技巧。那種單純以為句柄是指針或索引的主意都是機(jī)械的、不切當(dāng)?shù)摹?/div>
其實(shí),在Windows中類似的處理是許多的、很靈活的。再舉個(gè)相似的例子:
咱們知道,在Windows中有個(gè)函數(shù)叫做CallWindowProc。望文生義,它的效果就是向指定的窗口過(guò)程傳遞一個(gè)消息。你或許會(huì)想,已然我現(xiàn)已有了窗口過(guò)程的指針,為什么我不能夠直接通過(guò)這個(gè)指針調(diào)用該函數(shù)(這是C語(yǔ)言的內(nèi)建功能)?事實(shí)上,在Win16中確實(shí)能夠這么做,因?yàn)镚etWindowLong回來(lái)的確實(shí)是該函數(shù)的指針。但在Win32下,GetWindowLong回來(lái)的并不是該函數(shù)的指針,而是一個(gè)包括函數(shù)指針的數(shù)據(jù)結(jié)構(gòu)的指針(MSDN上說(shuō)回來(lái)的是一個(gè)窗口函數(shù)地址或它的句柄,就是指的這種情況)。該數(shù)據(jù)結(jié)構(gòu)是可變的,但只需你運(yùn)用CallWindowProc來(lái)調(diào)用的話是不會(huì)犯錯(cuò)的。這兒咱們又看到運(yùn)用句柄處理帶來(lái)的優(yōu)點(diǎn)。(補(bǔ)充闡明一點(diǎn):微軟在這兒之所以這么處理,是為了處理16位/32位以及ANSI/UNICODE的轉(zhuǎn)化問(wèn)題)
解疑
界說(shuō)
句柄是什么?
在windows中,句柄是和目標(biāo)一一對(duì)應(yīng)的32位無(wú)符號(hào)整數(shù)值。目標(biāo)能夠映射到唯
一的句柄,句柄也能夠映射到唯一的目標(biāo)。
用途
為什么咱們需求句柄?
更準(zhǔn)確地說(shuō),是windows需求句柄。windows需求向程序員供給必要的編程接口
,在這些接口中,答應(yīng)程序員拜訪、創(chuàng)立和銷毀目標(biāo)?墒,出于封裝地考慮,wi
ndows并不想向程序員回來(lái)指針。指針包括了太多的信息。首先指針給出了目標(biāo)存儲(chǔ)
確實(shí)切位置;其次,要操作一個(gè)指針,程序員必須知道指針?biāo)改繕?biāo)的內(nèi)部結(jié)構(gòu)特
征,也即,windows必須向程序員露出相應(yīng)的數(shù)據(jù)結(jié)構(gòu),而這些數(shù)據(jù)結(jié)構(gòu)或許是操作
體系想向程序員隱藏的。
假如說(shuō)COM技能向用戶隱藏了數(shù)據(jù),只露出了接口并只答應(yīng)按接口界說(shuō)的辦法操
作數(shù)據(jù)的話,句柄這種方式則答應(yīng)你按自己的方式直接操作數(shù)據(jù),但windows又不向
你直接露出數(shù)據(jù)。直接操作數(shù)據(jù)是程序員需求的,不露出數(shù)據(jù)是windows所需求的,
句柄封裝方式完成了各取所需。
映射
句柄怎么與目標(biāo)映射
封裝背后,必須有一個(gè)當(dāng)?shù)啬軌蛲瓿?a href="/down/5538.html">解碼,以完成句柄和目標(biāo)的相互轉(zhuǎn)化。在
windows中,存在兩種映射方式:
a. 全等映射。也即,句柄自身就是一個(gè)指針。映射在這兒只是類型轉(zhuǎn)化而已。
這種情況有,進(jìn)程實(shí)例句柄或模塊句柄,以及資源句柄等等。
b. 根據(jù)表格的映射。這是目標(biāo)指針與句柄之間最普通的映射機(jī)制。操作體系創(chuàng)
建表格,并保存一切要考慮的目標(biāo)。需求創(chuàng)立新目標(biāo)時(shí),要先在表格中找到空進(jìn)口
,然后把表示目標(biāo)的數(shù)據(jù)添入其中。當(dāng)目標(biāo)被刪除時(shí),它的數(shù)據(jù)成員和其在表中的
進(jìn)口被釋放。
完成
句柄的界說(shuō)和完成
咱們以GDI目標(biāo)為例進(jìn)行討論。創(chuàng)立了GDI目標(biāo),就會(huì)得到該目標(biāo)的句柄。句柄
的目標(biāo)或許是HBRUSH、HPEN、HFONT或HDC中的一種,這依賴于你創(chuàng)立 的GDI目標(biāo)類
型?墒亲钇胀ǖ腉DI目標(biāo)類型是HGDIOBJ。HGDIOBJ被界說(shuō)成空指針。
HPEN的實(shí)際編譯類型界說(shuō)隨編譯時(shí)間宏STRICT的不同而不同。假如STRCIT現(xiàn)已
被界說(shuō)了,HPEN是這樣的:

12下一頁(yè)>

相關(guān)資訊

系統(tǒng)資訊排行
最新系統(tǒng)資訊
系統(tǒng)教程分類

更多常用電腦軟件

更多同類軟件專題