句柄

来源:互联网 发布:山西 软件开发水平 编辑:程序博客网 时间:2024/05/29 15:55
 

        在Windows中,句柄是一个系统内部数据结构的引用。例如当你操作一个窗口,或说是一个Delphi窗体时,系统会给你一个该窗口的句柄,系统会通知你:你正在操作142号窗口,就此你的应用程序就能要求系统对142号窗口进行操作——移动窗口、改变窗口大小、把窗极小化为图标等。实际上许多Windows API函数把句柄作为它的第一个参数,如GDI(图形设备接口)句柄、菜单句柄、实例句柄、位图句柄等,不仅仅局限于窗口函数。换句话说,句柄是一种内部代码,通过它能引用受系统控制的特殊元素,如窗口、位图、图标、内存块、光标、字体、菜单等。

       单从概念上讲,句柄指一个对象的标识,而指针是一个对象的首地址。从实际处理的角度讲,即可以把句柄定义为指针,又可以把它定义为同类对象数组的索引,这两种处理方法都有优缺点,至于选用哪种方式,完全应该看实际需要,这可以说是一种程序设计上的技巧。那种单纯认为句柄是指针或索引的想法都是机械的、不确切的。

      windows中,句柄是和对象一一对应的32位无符号整数值。对象可以映射到唯 一的句柄,句柄也可以映射到唯一的对象。

 

 为什么我们需要句柄?

     确地说,是windows需要句柄。windows需要向程序员提供必要地编程接口 ,在这些接口中,允许程序员访问、创建和销毁对象。但是,出于封装地考虑,wi ndows并不想向程序员返回指针。指针包含了太多的信息。首先指针给出了对象存储 的确切位置;其次,要操作一个指针,程序员必须知道指针所指对象的内部结构特 征,也即,windows必须向程序员暴露相应的数据结构,而这些数据结构也许是操作 系统想向程序员隐藏的。 如果说COM技术向用户隐藏了数据,只暴露了接口并只允许按接口定义的方法操 作数据的话,句柄这种方式则允许你按自己的方式直接操作数据,但windows又不向 你直接暴露数据。直接操作数据是程序员需要的,不暴露数据是windows所需要的, 句柄封装方式实现了各取所需。

 

 设置句柄的形象解释

3路线公交公司旗下有N辆3路车.
到了发车时间到底让哪辆3路车出站?
按车牌号码分? 不, 车牌号码又长又没有规律, 不便于记忆和操作.
所以每辆3路车都有一个公交公司编定的车号. 相当于窗口的句柄.
要调度某辆车出站, 当然要先确定你要调度的车的车号.

 

每个窗口打开时,都会被系统临时随机分配一个编号,以便区分彼此
以后就通过这个句柄来对窗口进行操作
就像你出生后会被取一个姓名
以后别人就可以叫"xxx,你去干什么什么"

 

 

这个只能在操作系统说起 Windows支持多线程 那就需要句柄 来区分
比如你同时打开2个一样的IE网页 每次系统都会分配一段代码给 这2网页
当你关了网页 在打开 已经不是上次那个句柄了 每次分配都不一样的

很简单啊,比如说开了2个百度
第1个百度的窗口句柄假设是1
第2个百度的窗口句柄假设是2

后台第1个百度就取1
操作第2个百度就取2

是系统给窗口的身份代码