能否详细介绍一下句柄?和如何得到一个窗体的句柄?谢谢

解决方案 »

  1.   

    dim L as long
    L=form1.hwnd
      

  2.   

    句柄的概念:
    句柄其实就是指向指针的指针,因为WINDOWS操作系统是一个基于虚拟内存工作的,所以,为了管理内存,每个对象可能在不能的时候,他们的内存地址是不一样的,这个时候操作系统就专门腾出一些位置,专门记录该对象的内存地址,这样,我们在找每个对象的时候就不需要找真正的内存地址了,而只要交给句柄就可以间接的找到了。
    而每一次启动的窗口可能都是不一样的长整型的数值,就像我们每次去看电影一样,我们把看电影看成一启动一个进程。每次看电影售票的可能给你的座位号都是不一样的。
    所以,我们每次启动窗口中me.hwnd的值都是不一样的。-----------------------------------------------
    hwnd 32位的窗口句柄。窗口可以是任何类型的屏幕对象,因为Win32能够维护大多数可
    视对象的句柄(窗口、对话框、按钮、编辑框等)。
    message 用于区别其他消息的常量值,这些常量可以是Windows单元中预定义的常量,也
    可以是自定义的常量。
    wParam 通常是一个与消息有关的常量值,也可能是窗口或控件的句柄。------------------------------------------------------------------
    句柄实际上是一种指向某种资源的指针,但与指针又有所不同。“句柄”(handle),handle的本意是把柄,把手的意思。是你与操作系统打交道的东东。举个通俗的例子,比如你考上了大学,入学后,学校(操作系统)会给你一个学生证号。注意,这个号码是学校指定的,你无法自选。有了这个号码(学生证,假设一证多用)就可以享受学校提供的服务:如你就可以去图书馆借书,去食堂吃饭,去教室上课等等。但你不能到食堂里买啤酒,因为学校不允许这种服务。而在计算机中系统提供的服务就是API调用,你有了HANDLE,就可以理直气壮地向系统提出调用API的服务。而指针的权力就大多了,有了指针你可以到处去喝酒,打架,学校(操作系统)管不着,所以句柄和指针的区别在于句柄只能调用系统提供的服务。而句柄虽然是一个能相互区别的号码,但与我们普通的ID号又有区别,普通的ID号是可以由程序员自己定义的,而句柄不行,它是对象生成时系统指定的,是为了区别系统中存在的各个对象,这个句柄不是由程序员符给的。实际应用中,最常用的就是文件句柄和窗口句柄。例如,窗口句柄的值是一个长整数,每个窗体都用一个句柄来表示。所以句柄是不会重复的,很多的函数都会用到窗体的句柄。
    Windows通过句柄(Handle)识别每个窗体、控件、菜单和菜单项,当程序运行时,它所包含的每个部件都有一个惟一确定的句柄同其他的部件相区别句柄在Windows API中具有举足轻重的作用