文件路径为:C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include
通过此文件可以得知:
1、IN和OUT只是个宏,目的是表示参数的意义,为了方便阅读理解函数的意思。
2、标准C++数据类型与Windows数据类型区别
WORD:16位无符号整形数据
DWORD:32位无符号整型数据(DWORD32)
DWORD64:64位无符号整型数据
INT:32位有符号整型数据类型
INT_PTR:指向INT数据类型的指针类型
INT32:32位符号整型
INT64:64位符号整型
UINT:无符号INT
LONG:32位符号整型(LONG32)
ULONG:无符号LONG
LONGLONG:64位符号整型(LONG64)
SHORT:无符号短整型(16位)
typedef unsigned long DWORD;
typedef int BOOL;
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef float FLOAT;
typedef FLOAT *PFLOAT;
typedef BOOL near *PBOOL;
typedef BOOL far *LPBOOL;
typedef BYTE near *PBYTE;
typedef BYTE far *LPBYTE;
typedef int near *PINT;
typedef int far *LPINT;
typedef WORD near *PWORD;
typedef WORD far *LPWORD;
typedef long far *LPLONG;
typedef DWORD near *PDWORD;
typedef DWORD far *LPDWORD;
typedef void far *LPVOID;
typedef CONST void far *LPCVOID;
typedef int INT;
typedef unsigned int UINT;
typedef unsigned int *PUINT;
3、函数调用方式
#define CALLBACK __stdcall
#define WINAPI __stdcall
#define WINAPIV __cdecl
#define APIENTRY WINAPI
#define APIPRIVATE __stdcall
#define PASCAL __stdcall
4、
#define MAKEWORD(a, b) ((WORD)(((BYTE)(((DWORD_PTR)(a)) & 0xff)) | ((WORD)((BYTE)(((DWORD_PTR)(b)) & 0xff))) << 8)) #define MAKELONG(a, b) ((LONG)(((WORD)(((DWORD_PTR)(a)) & 0xffff)) | ((DWORD)((WORD)(((DWORD_PTR)(b)) & 0xffff))) << 16)) #define LOWORD(l) ((WORD)(((DWORD_PTR)(l)) & 0xffff)) #define HIWORD(l) ((WORD)((((DWORD_PTR)(l)) >> 16) & 0xffff)) //提取16位值中低位字节 #define LOBYTE(w) ((BYTE)(((DWORD_PTR)(w)) & 0xff)) //提取16位值中高位字节
全部源代码如下:
/**************************************************************************** * * * windef.h -- Basic Windows Type Definitions * * * * Copyright (c) Microsoft Corporation. All rights reserved. * * * ****************************************************************************/ #ifndef _WINDEF_ #define _WINDEF_ #pragma once #ifndef NO_STRICT #ifndef STRICT #define STRICT 1 #endif #endif /* NO_STRICT */ // Win32 defines _WIN32 automatically, // but Macintosh doesn't, so if we are using // Win32 Functions, we must do it here #ifdef _MAC #ifndef _WIN32 #define _WIN32 #endif #endif //_MAC #ifndef WIN32 #define WIN32 #endif #ifdef __cplusplus extern "C" { #endif #ifndef WINVER #define WINVER 0x0500 #endif /* WINVER */ /* * BASETYPES is defined in ntdef.h if these types are already defined */ #ifndef BASETYPES #define BASETYPES typedef unsigned long ULONG; typedef ULONG *PULONG; typedef unsigned short USHORT; typedef USHORT *PUSHORT; typedef unsigned char UCHAR; typedef UCHAR *PUCHAR; typedef char *PSZ; #endif /* !BASETYPES */ #define MAX_PATH 260 #ifndef NULL #ifdef __cplusplus #define NULL 0 #else #define NULL ((void *)0) #endif #endif #ifndef FALSE #define FALSE 0 #endif #ifndef TRUE #define TRUE 1 #endif #ifndef IN #define IN #endif #ifndef OUT #define OUT #endif #ifndef OPTIONAL #define OPTIONAL #endif #undef far #undef near #undef pascal #define far #define near #if (!defined(_MAC)) && ((_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED)) #define pascal __stdcall #else #define pascal #endif #if defined(DOSWIN32) || defined(_MAC) #define cdecl _cdecl #ifndef CDECL #define CDECL _cdecl #endif #else #define cdecl #ifndef CDECL #define CDECL #endif #endif #ifdef _MAC #define CALLBACK PASCAL #define WINAPI CDECL #define WINAPIV CDECL #define APIENTRY WINAPI #define APIPRIVATE CDECL #ifdef _68K_ #define PASCAL __pascal #else #define PASCAL #endif #elif (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) #define CALLBACK __stdcall #define WINAPI __stdcall #define WINAPIV __cdecl #define APIENTRY WINAPI #define APIPRIVATE __stdcall #define PASCAL __stdcall #else #define CALLBACK #define WINAPI #define WINAPIV #define APIENTRY WINAPI #define APIPRIVATE #define PASCAL pascal #endif #ifdef _M_CEE_PURE #define WINAPI_INLINE __clrcall #else #define WINAPI_INLINE WINAPI #endif #undef FAR #undef NEAR #define FAR far #define NEAR near #ifndef CONST #define CONST const #endif typedef unsigned long DWORD; typedef int BOOL; typedef unsigned char BYTE; typedef unsigned short WORD; typedef float FLOAT; typedef FLOAT *PFLOAT; typedef BOOL near *PBOOL; typedef BOOL far *LPBOOL; typedef BYTE near *PBYTE; typedef BYTE far *LPBYTE; typedef int near *PINT; typedef int far *LPINT; typedef WORD near *PWORD; typedef WORD far *LPWORD; typedef long far *LPLONG; typedef DWORD near *PDWORD; typedef DWORD far *LPDWORD; typedef void far *LPVOID; typedef CONST void far *LPCVOID; typedef int INT; typedef unsigned int UINT; typedef unsigned int *PUINT; #ifndef NT_INCLUDED #include <winnt.h> #endif /* NT_INCLUDED */ #include <specstrings.h> /* Types use for passing & returning polymorphic values */ typedef UINT_PTR WPARAM; typedef LONG_PTR LPARAM; typedef LONG_PTR LRESULT; #ifndef NOMINMAX #ifndef max #define max(a,b) (((a) > (b)) ? (a) : (b)) #endif #ifndef min #define min(a,b) (((a) < (b)) ? (a) : (b)) #endif #endif /* NOMINMAX */ #define MAKEWORD(a, b) ((WORD)(((BYTE)(((DWORD_PTR)(a)) & 0xff)) | ((WORD)((BYTE)(((DWORD_PTR)(b)) & 0xff))) << 8)) #define MAKELONG(a, b) ((LONG)(((WORD)(((DWORD_PTR)(a)) & 0xffff)) | ((DWORD)((WORD)(((DWORD_PTR)(b)) & 0xffff))) << 16)) #define LOWORD(l) ((WORD)(((DWORD_PTR)(l)) & 0xffff)) #define HIWORD(l) ((WORD)((((DWORD_PTR)(l)) >> 16) & 0xffff)) #define LOBYTE(w) ((BYTE)(((DWORD_PTR)(w)) & 0xff)) #define HIBYTE(w) ((BYTE)((((DWORD_PTR)(w)) >> 8) & 0xff)) #ifndef WIN_INTERNAL DECLARE_HANDLE (HWND); DECLARE_HANDLE (HHOOK); #ifdef WINABLE DECLARE_HANDLE (HEVENT); #endif #endif typedef WORD ATOM; typedef HANDLE NEAR *SPHANDLE; typedef HANDLE FAR *LPHANDLE; typedef HANDLE HGLOBAL; typedef HANDLE HLOCAL; typedef HANDLE GLOBALHANDLE; typedef HANDLE LOCALHANDLE; #ifndef _MANAGED #ifndef _MAC #ifdef _WIN64 typedef INT_PTR (FAR WINAPI *FARPROC)(); typedef INT_PTR (NEAR WINAPI *NEARPROC)(); typedef INT_PTR (WINAPI *PROC)(); #else typedef int (FAR WINAPI *FARPROC)(); typedef int (NEAR WINAPI *NEARPROC)(); typedef int (WINAPI *PROC)(); #endif // _WIN64 #else typedef int (CALLBACK *FARPROC)(); typedef int (CALLBACK *NEARPROC)(); typedef int (CALLBACK *PROC)(); #endif #else typedef INT_PTR (WINAPI *FARPROC)(void); typedef INT_PTR (WINAPI *NEARPROC)(void); typedef INT_PTR (WINAPI *PROC)(void); #endif #if !defined(_MAC) || !defined(GDI_INTERNAL) #ifdef STRICT typedef void NEAR* HGDIOBJ; #else DECLARE_HANDLE(HGDIOBJ); #endif #endif DECLARE_HANDLE(HKEY); typedef HKEY *PHKEY; #if !defined(_MAC) || !defined(WIN_INTERNAL) DECLARE_HANDLE(HACCEL); #endif #if !defined(_MAC) || !defined(GDI_INTERNAL) DECLARE_HANDLE(HBITMAP); DECLARE_HANDLE(HBRUSH); #endif #if(WINVER >= 0x0400) DECLARE_HANDLE(HCOLORSPACE); #endif /* WINVER >= 0x0400 */ #if !defined(_MAC) || !defined(GDI_INTERNAL) DECLARE_HANDLE(HDC); #endif DECLARE_HANDLE(HGLRC); // OpenGL DECLARE_HANDLE(HDESK); DECLARE_HANDLE(HENHMETAFILE); #if !defined(_MAC) || !defined(GDI_INTERNAL) DECLARE_HANDLE(HFONT); #endif DECLARE_HANDLE(HICON); #if !defined(_MAC) || !defined(WIN_INTERNAL) DECLARE_HANDLE(HMENU); #endif DECLARE_HANDLE(HMETAFILE); DECLARE_HANDLE(HINSTANCE); typedef HINSTANCE HMODULE; /* HMODULEs can be used in place of HINSTANCEs */ #if !defined(_MAC) || !defined(GDI_INTERNAL) DECLARE_HANDLE(HPALETTE); DECLARE_HANDLE(HPEN); #endif DECLARE_HANDLE(HRGN); DECLARE_HANDLE(HRSRC); DECLARE_HANDLE(HSPRITE); DECLARE_HANDLE(HLSURF); DECLARE_HANDLE(HSTR); DECLARE_HANDLE(HTASK); DECLARE_HANDLE(HWINSTA); DECLARE_HANDLE(HKL); #if(WINVER >= 0x0400) DECLARE_HANDLE(HWINEVENTHOOK); #endif /* WINVER >= 0x0400 */ #if(WINVER >= 0x0500) #ifndef _MAC DECLARE_HANDLE(HMONITOR); #endif DECLARE_HANDLE(HUMPD); #endif /* WINVER >= 0x0500 */ #ifndef _MAC typedef int HFILE; typedef HICON HCURSOR; /* HICONs & HCURSORs are polymorphic */ #else typedef short HFILE; DECLARE_HANDLE(HCURSOR); /* HICONs & HCURSORs are not polymorphic */ #endif typedef DWORD COLORREF; typedef DWORD *LPCOLORREF; #define HFILE_ERROR ((HFILE)-1) typedef struct tagRECT { LONG left; LONG top; LONG right; LONG bottom; } RECT, *PRECT, NEAR *NPRECT, FAR *LPRECT; typedef const RECT FAR* LPCRECT; typedef struct _RECTL /* rcl */ { LONG left; LONG top; LONG right; LONG bottom; } RECTL, *PRECTL, *LPRECTL; typedef const RECTL FAR* LPCRECTL; typedef struct tagPOINT { LONG x; LONG y; } POINT, *PPOINT, NEAR *NPPOINT, FAR *LPPOINT; typedef struct _POINTL /* ptl */ { LONG x; LONG y; } POINTL, *PPOINTL; typedef struct tagSIZE { LONG cx; LONG cy; } SIZE, *PSIZE, *LPSIZE; typedef SIZE SIZEL; typedef SIZE *PSIZEL, *LPSIZEL; typedef struct tagPOINTS { #ifndef _MAC SHORT x; SHORT y; #else SHORT y; SHORT x; #endif } POINTS, *PPOINTS, *LPPOINTS; // // File System time stamps are represented with the following structure: // typedef struct _FILETIME { DWORD dwLowDateTime; DWORD dwHighDateTime; } FILETIME, *PFILETIME, *LPFILETIME; #define _FILETIME_ /* mode selections for the device mode function */ #define DM_UPDATE 1 #define DM_COPY 2 #define DM_PROMPT 4 #define DM_MODIFY 8 #define DM_IN_BUFFER DM_MODIFY #define DM_IN_PROMPT DM_PROMPT #define DM_OUT_BUFFER DM_COPY #define DM_OUT_DEFAULT DM_UPDATE /* device capabilities indices */ #define DC_FIELDS 1 #define DC_PAPERS 2 #define DC_PAPERSIZE 3 #define DC_MINEXTENT 4 #define DC_MAXEXTENT 5 #define DC_BINS 6 #define DC_DUPLEX 7 #define DC_SIZE 8 #define DC_EXTRA 9 #define DC_VERSION 10 #define DC_DRIVER 11 #define DC_BINNAMES 12 #define DC_ENUMRESOLUTIONS 13 #define DC_FILEDEPENDENCIES 14 #define DC_TRUETYPE 15 #define DC_PAPERNAMES 16 #define DC_ORIENTATION 17 #define DC_COPIES 18 #ifdef __cplusplus } #endif #endif /* _WINDEF_ */