极速下载站 —— 提供优质软件下载服务,感受全新的极速下载体验!

最近更新 | 软件专题 | 软件分类 | 软件排行

您的位置:极速下载站资讯首页系统教程系统资讯 → 窗口句柄详细简介

窗口句柄详细简介

时间:2019-10-04 14:23:10  作者:无名  浏览量:56

大家好,今天小编给大家分享一下在Windows中,句柄是一个体系内部数据结构的引证。例如当你操作一个窗口,或说是一个Delphi窗体时,体系会给你一个该窗口的句柄,体系会告诉你:你正在操作142号窗口,就此你的应用程序就能要求体系对142号窗口进行操作——移动窗口、改动窗口巨细、把窗口最小化等等。实际上许多Windows API函数把句柄作为它的第一个参数,如GDI(图形设备接口)句柄、菜单句柄、实例句柄、位图句柄等,不仅仅局限于窗口函数。换句话说,句柄是一种内部代码,通过它能引证受体系控制的特别元素,如窗口、位图、图标、内存块、光标、字体、菜单等。
窗口句柄详细简介
窗口句柄详细简介图1
概念
单从概念上讲,句柄指一个目标的标识,而指针是一个目标的内存首地址。从实际处理的角度讲,即能够把句柄界说为指针,又能够把它界说为同类目标数组的索引,这两种处理办法都有优缺点,至于选用哪种方式,完全应该看实际需求,这能够说是一种程序设计上的技巧。那种单纯以为句柄是指针或索引的主意都是机械的、不切当的。
其实,在Windows中类似的处理是许多的、很灵活的。再举个相似的例子:
咱们知道,在Windows中有个函数叫做CallWindowProc。望文生义,它的效果就是向指定的窗口过程传递一个消息。你或许会想,已然我现已有了窗口过程的指针,为什么我不能够直接通过这个指针调用该函数(这是C语言的内建功能)?事实上,在Win16中确实能够这么做,因为GetWindowLong回来的确实是该函数的指针。但在Win32下,GetWindowLong回来的并不是该函数的指针,而是一个包括函数指针的数据结构的指针(MSDN上说回来的是一个窗口函数地址或它的句柄,就是指的这种情况)。该数据结构是可变的,但只需你运用CallWindowProc来调用的话是不会犯错的。这儿咱们又看到运用句柄处理带来的优点。(补充阐明一点:微软在这儿之所以这么处理,是为了处理16位/32位以及ANSI/UNICODE的转化问题)
解疑
界说
句柄是什么?
在windows中,句柄是和目标一一对应的32位无符号整数值。目标能够映射到唯
一的句柄,句柄也能够映射到唯一的目标。
用途
为什么咱们需求句柄?
更准确地说,是windows需求句柄。windows需求向程序员供给必要的编程接口
,在这些接口中,答应程序员拜访、创立和销毁目标。可是,出于封装地考虑,wi
ndows并不想向程序员回来指针。指针包括了太多的信息。首先指针给出了目标存储
确实切位置;其次,要操作一个指针,程序员必须知道指针所指目标的内部结构特
征,也即,windows必须向程序员露出相应的数据结构,而这些数据结构或许是操作
体系想向程序员隐藏的。
假如说COM技能向用户隐藏了数据,只露出了接口并只答应按接口界说的办法操
作数据的话,句柄这种方式则答应你按自己的方式直接操作数据,但windows又不向
你直接露出数据。直接操作数据是程序员需求的,不露出数据是windows所需求的,
句柄封装方式完成了各取所需。
映射
句柄怎么与目标映射
封装背后,必须有一个当地能够完成解码,以完成句柄和目标的相互转化。在
windows中,存在两种映射方式:
a. 全等映射。也即,句柄自身就是一个指针。映射在这儿只是类型转化而已。
这种情况有,进程实例句柄或模块句柄,以及资源句柄等等。
b. 根据表格的映射。这是目标指针与句柄之间最普通的映射机制。操作体系创
建表格,并保存一切要考虑的目标。需求创立新目标时,要先在表格中找到空进口
,然后把表示目标的数据添入其中。当目标被删除时,它的数据成员和其在表中的
进口被释放。
完成
句柄的界说和完成
咱们以GDI目标为例进行讨论。创立了GDI目标,就会得到该目标的句柄。句柄
的目标或许是HBRUSH、HPEN、HFONT或HDC中的一种,这依赖于你创立 的GDI目标类
型。可是最普通的GDI目标类型是HGDIOBJ。HGDIOBJ被界说成空指针。
HPEN的实际编译类型界说随编译时间宏STRICT的不同而不同。假如STRCIT现已
被界说了,HPEN是这样的:

12下一页>

相关资讯