HWND是一个窗口的句柄,HINSTANCE代表程序的一个实例。但是这两者在具体函数调用中究竟有何区别?他们是不是指向同一个事物,即一个窗口呢?如是,那么为什么有的API函数调用需要HWND,而有的使用HINSTANCE?还望各位大侠不吝赐教,先谢过了。

解决方案 »

  1.   

    都是地址。不过,HWND,一般是窗体句柄。HINSTANCE,一般是个线程的句柄。
      

  2.   

    HINSTANCE:Handle to an instance.
    HWND:Handle to a window.一个进程窗口可以有很多个,但是自身实例只有一个.
      

  3.   

    就HWND和HINSTANCE的定义来说,是一样的,都是HANDLE类型。不过用typedef重新命名为不同的别名而已。
      

  4.   

    都是句柄, 都是HANDLE类型,表示不同范围,比如HWND是窗口类的handle
      

  5.   

    楼上几位说的都没有错。不过请看下面两个API函数:HDC GetDC(
      HWND hWnd   // handle to window
    );和
    HWND CreateDialogParam(          HINSTANCE hInstance,
        LPCTSTR lpTemplateName,
        HWND hWndParent,
        DLGPROC lpDialogFunc,
        LPARAM dwInitParam
    );为什么不同的函数有的会使用HWND,有的使用HINSTANCE? 能否用一个来代替呢?
      

  6.   

    fanqing(火影忍者+26%)已说得很好了啊
      

  7.   

    为什么不同的函数有的会使用HWND,有的使用HINSTANCE? 能否用一个来代替呢?
    -----------------------------------
    因为两者代表了不同的意义啊,这些函数本来就是针对不同的句柄的,当然也就不能用一个来代替,你在获取这些句柄时用到的函数也是不一样的。
      

  8.   

    该问题属于SDK的常识性问题。
    HINSTANCE是指向程序文件加载到内存中的首地址。
    HWND是Windows下的一个用户对象。
    系统提供三类对象:用户对象,GDI对象和内核对象。对象不能直接操作,只能通过handle来完成。
    HWND的三类对象中用户对象中的一种。HCURSOR, HICON, HMENU, HDWP, HACCEL,HWND等均为用户对象。
    CreateDialogParam中的hInstance指的是从哪儿加载对话框资源,是从程序本身的资源加载,还是从某个外部文件中加载。
    hWndParent指的是对话框中的父窗口。
      

  9.   

    注册一个窗口类并且创建了窗口之后,就有了一个窗口句柄HWND和一个窗口实例HINSTANCE。那么,是哪个东西使得我们可以创建一个窗口的多个实例?是不是用HWND 来创建多个HINSTANCE?有没有这方面的例子,比如在MSDN上? 我看了Program windows 5th这本书,想不通这两个到底是什么关系?有点糊涂了。比如在载入资源的时候,使用的是HINSTANCE,可为什么不是HWND呢?他们都能够代表同一个窗口吗?
      

  10.   

    HINSTANCE是加载到内存中的exe或dll文件的一个实例。
    多个实例是指你可以在同一时间运行同一个应用程序多次。HWND是你在应用程序中创建的窗口,(应用程序可以是无窗口的)。
    窗口对象是一个数据结构,系统根据它来显示常规界面的建立和维护。该数据结构不能直接操作,必须通过句柄(HWND)借助API来完成。
      

  11.   

    hwnd 对应于某个窗口或控件
    hinstance 对应于exe或dll
      

  12.   

    如果我做了个程序abc.exe,同时运行2遍。那么屏幕上有2个窗口,是不是指的是有1个HWND,2个HINSTANCE?这样理解对吗?
      

  13.   

    你对窗口的理解有误。
      “窗口”不单只是最上层的含标题栏和菜单的Window, 文本框、组合框、工具栏、按钮、列表框等均为窗口。
      “窗口”对象为一个数据结构。假设你定义了一个结构struct PERSON{TCHAR szName[100]; UINT gender;};则在程序中可以通过 PERSON p1; 这样的方法使用该对象。“窗口”也为一种数据结构,通过各成员变量和方法来响应消息和刷新屏幕等。但这种数据结构程序员不能直接访问,只能通过称为HWND的句柄来间接使用(无需理会系统处理的细节)。
      若你在应用程序中创建了w个窗口对象,则每运行一个实例时就会有w个窗口。n个实例就会有n*w个窗口。
      

  14.   

    To chehw(chehw):这样理解是不是正确:HWND只是主窗口的句柄,还可以有其他的子窗口、子控件的HWND,真正代表这个程序的是HINSTANCE?WinMain中的HINSTANCE代表的就是窗口实例,也就是窗口本身;用CreateWindow返回的就是主窗口的句柄?换句话说,真正代表这个程序,这整个主窗口的是HINSTANCE?