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

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

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

窗口句柄詳細簡介

時間:2019-10-04 14:23:10  作者:無名  瀏覽量:56

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

12下一頁>

相關(guān)資訊

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

更多常用電腦軟件

更多同類軟件專題