举HBITMAP的例子,
在windef.h中对句柄有一个定义的宏 :DECLARE_HANDLE()
在winNT.h中又有 DECLARE_HANDLE(HBITMAP);
具体展开:
#define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name
我们知道 , "##" 是"沾黏符"
展开就是:
struct HBITMAP__
{
int unused;
};
typedef struct HBITMAP__ * HBITMAP ;
所以 HBITMAP hBitmap; 就是 HBITMAP__* hBitmap ;
而由于HBITMAP__ 只有一个成员变量, 可以不考虑字节对齐,
所以 HBITMAP hBitmap; 也就相当于 int* hBitmap;