什么是“句柄”(handle),handle的本意是把柄,把手的意思。是你与操作系统打交道的
东东。举个通俗的例子,比如你考上了大学,入学后,学校(操作系统)会给你一个学生
证号。注意,这个号码是学校指定的,你无法自选。有了这个号码(学生证,假设一证多用)
享受学校提供的服务:如你就可以去图书馆借书,去食堂吃饭,去教室上课等等。但你不能
到食堂里买啤酒,因为学校不允许这种服务。而在计算机中系统提供的服务就是API调用,
你有了HANDLE,就可以理直气壮地向系统提出调用API的服务。
而指针的权力就大多了,有了指针你可以到处去喝酒,打架,学校(操作系统)管不着,所以
句柄和指针的区别在于句柄只能调用系统提供的服务。而句柄虽然是一个能相互区别的号码,
但与我们普通的ID号又有区别,普通的ID号是可以由程序员自己定义的,而句柄不行,它是
对象生成时系统指定的,是为了区别系统中存在的各个对象,这个句柄不是由程序员符给的

解决方案 »

  1.   

    to yun123789(云):
    《Windows核心编程》里有解答。
      

  2.   

    上面的老兄虽然很有意思的解释了一通,但是还没有谈到实质上,让我来发表几句,提高我们中国程序员的水平: 
        句柄的实质:句柄其实是key!为什么要这个key呢,举个例子来说,我们有1000万元钱,带在身上很不方便,于是我们就把它存在一个在世界范围内都联网的银行里面,于是我们无论走到哪里都可以用这1000万元钱,而不需要带着这一千万到处跑,非常方便,句柄就是那个帐户和密码,FromHadle()就是分布在世界各地的自动取款机。
        在MFC里面,整个过程是通过映射来实现的,无论是一个窗体,还是一个GDI资源,一旦创建,就要生成一个下相应的句柄,并将将这个句柄和创建的内容的指针作为映射的一个元素添加到映射,当你调用FromHandle时,映射就根据你提供的key(句柄)调用LookUp函数找到所对应内容的地址,返回对象给你。我们调用Detach()函数后,对象即使出了生命期,它也不会被释放,而要你人为地去根据句柄释放它!
           好了,看了这些,你是不是也可以为自己的类添加写自己的句柄了呢?