#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的定义转到上面的代码看不懂了,能教教我么
最后它是什么类型?
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的定义转到上面的代码看不懂了,能教教我么
最后它是什么类型?
其实是一个结构,微软保密,应该包含窗口属性,位置,窗口DC,等等。
凡是通过hWnd可以等等的东西,都在这个结构中。
#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 宏定义后,这些句柄类型分别被定义为不同的结构体指针(尽管这些结构体可能不存在),只是为了严格检查类型类型。实际上他不管被定义为啥类型类型都是不重要,反正你不知道内部结构也不需要知道。