#ifndef WIN_INTERNAL
DECLARE_HANDLE            (HWND);
DECLARE_HANDLE            (HHOOK);
#ifdef WINABLE
DECLARE_HANDLE            (HEVENT);
#endif#define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name
-------------我没看明白它到底是什么类型 
但是能把hwnd=CreateWindow("ZZ2012","我做的",WS_OVERLAPPEDWINDOW,
400,400,600,400,NULL,NULL,hInstance,NULL);我的MSDN查询不到CreateWindow函数的返回类型 hwnd的也查询不到  看VC6的转到xxx的定义转到上面的代码看不懂了,能教教我么 
最后它是什么类型?

解决方案 »

  1.   

    窗口句柄 类型void*
    其实是一个结构,微软保密,应该包含窗口属性,位置,窗口DC,等等。
    凡是通过hWnd可以等等的东西,都在这个结构中。
      

  2.   

    通常模式下:
    #define VOID void
    typedef VOID *LPVOID;
    typedef LPVOID HANDLE;
    typedef HANDLE HWND;
    STRICT 模式:
    struct HWND__ { int unused; }; typedef struct HWND__ *HWND;
    struct HFONT__ { int unused; }; typedef struct HFONT__ *HFONT;通常情况下,将 HWND、HBRUSH、HFONT 等替换为 HANDLE 是不会有问题的,因为他们是同一个类型定义出来的。而 STRCIT 宏定义后,这些句柄类型分别被定义为不同的结构体指针(尽管这些结构体可能不存在),只是为了严格检查类型类型。实际上他不管被定义为啥类型类型都是不重要,反正你不知道内部结构也不需要知道。