RT
如果不是,二者有什么区别?
谢谢

解决方案 »

  1.   

    ID是控件的标识,就好像是一个人的名字一样。
    句柄是控件在数据结构上的外部标识代理,因为不便于通过内存指针暴露(防止用户通过指针越权修改,暴露细节,同时破坏黑盒式的封装)用户,所以便通过一个代理指针,即句柄来代理一个windows对象,可以近似的把句柄理解为一个指针,但是该指针不暴露内存细节,只是一个代理而已。
    关于代理的机制,你可以参考设计模式中的代理模式
      

  2.   

    ID是用户定义的值,句柄是系统生成并管理的。ID的作用有哪些呢?
    对于顶级窗口,ID不存在,它的含义变成了HMENU,窗口拥有的菜单句柄。
    对于子窗口,ID在创建窗口时就能随意指定,可以相同,也可以不同,可以调用 GetDlgItem 检索ID对应的窗口句柄。但ID在某些特殊情形下有特殊含义,当子窗口是 RADIO 类型时,多个RADIO需要分配相同的ID(且属于同一个GROUP)才被认为是一组单选项,否则这些单选项各自独立。除此之外,ID基本上没有作用。
      

  3.   

    我想问,SendMessage这个函数中,第一个参数是句柄,我想将消息传到某个窗口,在VC++6.0中如何获得句柄这个参数?
      

  4.   

    ID是身份证(身份证的英文缩写也是ID),即身份证上的号码;
    中了500万彩票是事件;500万现金是对象;
    500万支票是指针,指向500万现金这个对象;那张彩票是句柄,因为不便于暴露500万支票那根指针;
    彩票句柄兑换到支票指针后,可以不要了;你买一张彩票,开奖前不知道是否中奖,因为彩票句柄是查看不了的。
    中了500万彩票这个事件,是通过彩票句柄,找到了500万支票那根指针,指向了500万现金那个对象;可是,这是谁中的呢?500万现金给谁呢?就需要身份证ID了。
      

  5.   

    句柄,都是映射到Windows内核对象的,Windows内部禁止通过指针破坏系统运行,所以给出一个句柄,在Windows内部有句柄列表来对应内核对象。可以看《Windows核心编程》
      

  6.   

    ID只用于控件等非常有限的地方,而句柄在整个WIN程序中到处使用,类似指针,但又不是指针,不能象指针一样直接访问其内存地址,但又能获得很多句柄指向的内存地址的内容。我想句柄是MS发明的一个OS极其以下各个内核对象的控制和使用的东东吧。
      

  7.   

    在操作系统中 句柄被用于每一个资源(文件,内存段,图片,窗口,设备,管道。)的唯一标识通过句柄可以拒绝程序直接访问资源,从而起到保护和共享等其他作用句柄由操作系统创建,释放,管理等。而用户则只能获取句柄,通过句柄访问资源而ID则是简单的数字标识。通常每个窗口都设置了ID,这个ID 不是唯一的,没有什么有效保护程序本身可以任意修改,不过某些ID 被赋予了特殊意义,在程序中会起到特别的作用PS:控件也是窗口的组合
      

  8.   

    A.m_hwnd  回复内容太短了
      

  9.   

        所谓句柄,就是一个唯一的数,用以标识许多不同的对象类型,如窗口、菜单、内存、画笔、画刷等。在Win32里,句柄是指向一个“无类型对象”(void*)的指针,也就是一个4字节长的数据。
        句柄和指针最大的不同是:给你一个指针,你可以通过这个指针做任何事情,也许是好事,也许是通过这个指针破坏内存,干一些捣乱的事情。这个我想大家都会碰到过,因为乱用指针导致程序崩溃。
        句柄就没有这个缺点,通过句柄,你只能干一些windows让你干的事情(调用一些api函数等等),没有了指针的坏处。
        另外,关于lz的的提问:SendMessage这个函数中,第一个参数是句柄,我想将消息传到某个窗口,在VC++6.0中如何获得句柄这个参数?指针和句柄之间是可以相互转换的:
    a.由指针获得句柄
    CWnd * pWnd;
    CWnd HWnd;
    HWnd = pWnd->GetSafeHWnd();b.由句柄得到指针:
    CWnd* pWnd=FromHandle(hMyHandle);
    pWnd->SetWindowText("Hello World!");
    or CWnd* pWnd; pWnd->Attach(hMyHandle);