我在自学VC++,句柄的概念让我很感迷茫.在我看了很多资料后我的理解如下,请高人为小弟找找错误.感激不尽!!!程序存储在内存中,所以就有该程序的内存地址.WINDOWS程序自然也是如此.由于种种原因,WINDOWS中的程序的内存地址是存储在一个
32位的变量中.该变量就叫句柄.如果有一个程序窗口,标示该窗口的是"实例句柄"(hInstance),我想改变,添加该窗口的代码,就要
通过该程序窗口的句柄,寻址到该程序所在内存中的位置,然后通过一些定义好了的函数进行操作。 
例子:有一程序窗口且其句柄为hInstance1。
      有一函数 void F(HANDLE hInstance); 功能是在hInstance标示的窗口中画个圆。
      于是执行 F(hinstance1);后该程序窗口中就有了一个圆。
      如果执行 F(NULL);在桌面上就会有个圆。
不知道这样理解对不对?

解决方案 »

  1.   

    窗口句柄其实就是操作系统给窗口的一个标号
    如果执行 F(NULL);在桌面上就会有个圆。 //除非缺省的窗口是桌面,
      

  2.   

    看看windows核心编程就知道什么是handle了,就是一个进程的handle表里面序号(相当于数组等)而已,通过这个序号再找到真正的地址..............
      

  3.   

    恩,handle称为句柄,所谓柄着,就是通过它可以进入到内部它的概念很简单,既可以理解为指针,也可以是序号下面为指针typedef struct _st
    {
    }void func(HANDLE *handle, ***)
    {
       struct st  // 
    }
      

  4.   

         windows核心编程第三章讲这个讲得比较清楚的.
      

  5.   

    呵呵,刚才发错了,没完指针方式
    typedef struct _st
    {
       int dd;
       int aa;
    } st_t;void func(HANDLE *handle, ***)
    {
       st_t *st = new st;  
       *handle = st; 
    }
      

  6.   

    有一种类叫“句柄类”
    就是搭个桥,让你不能直接访问windows类,而要通过句柄,这样你就看不见真正的类里面是怎么搞的了
      

  7.   

    序号方式,既不能直接操作
    typedef struct _st
    {
       int dd;
       int aa;
    } st_t;st_t st[3];void func_create(HANDLE *handle, ***)
    {
        *handle = 1;  // 当然也可以是2或者3,取决于用户输入的参数
    }void func_opt(HANDLE handle, ***)  // 句柄操作数据
    {
       int index = handle;
       
       int temp = st[index].aa;       // 操作内部数据
    }
      

  8.   

    handle is not equal to pointer.
    handle has its meaning with regard to then-current process.
    need to understand per-process handle table.in system-level programming,
    call Object Manager component service api
    The ObReferenceObjectByHandle routine provides access validation on the object handle, and, if access can be granted, returns the corresponding pointer to the object's body.
      

  9.   

    句柄有很多种,有些是一个指针,例如HINSTANCE;有些是索引值,例如HANDLE。