刚接触MFC的人一看到里面各种各样的关键字肯定傻眼了.仿佛完全是另外一门语言了.因为MFC中把C++中的基本数据类型的关键字全改了一遍.这还不算变态,因为只是把小字改成大写.比较变态的是MFC里面是很多五花八门的类型实际上对应的是同一种基本类型.就算这样嘛多花点时间也还能熟悉.更加变态的是它还用自己的类型再定义其他类型.所以这些事都是用typedef这个宏干的.所以MFC里面到处是一堆堆的宏.
(实际上准确的说很多类型是Windows API的数据类型,只不过有时在MFC用起来也混淆了.也不用去区分到底是MFC的还是API的了,反正MFC说到底也只是通过OO手段对API的封装罢了)
闲话少说,先来看下C++中有些啥基本数据类型
******************************************************************************************************
类 型 字节数
bool 1
char 1
wchar_t 2 (宽字符类型,存储Unicode代码值.用法wchart_t letter = L'a')
short 2
unsigned short 2 (unsigned 表示无符号,只能取非负数.unsigned short num = 123U ; //数字后面的U可加可不加)
int 4 (整形默认为int,long型需在后加L,如long lNumber = 123L; //L可加可不加)
unsigned int 4 (可简写为unsigned)
long 4 (貌似不同的编译器中不一样,有时会是8,偶也不太确定)
__int64 8
unsigned long 4
float 4
double 8
long double 8 (有些地方貌似是12)
******************************************************************************************************
MFC中与之对应的是
BOOL int
MFC中的指针类型
LPVOID typedef void far *
LPCVOID typedef CONST void far *
PWSTR , LPWSTR __nullterminated WCHAR *
PCWSTR ,LPCSWTR __nullterminated CONST WCHAR *
PTSTR,LPTSTR LPWSTR
PCTSTR , LPCTSTR LPCWSTR
BSTR wchar_t字符指针.原因: 1.typedef OLECHAR *BSTR 2.typedef WCHAR OLECHAR 3.typedef wchar_t WCHAR
一堆宏绕来绕去真他娘的麻烦.
PSTR,LPSTR __nullterminated CHAR *
PCSTR ,LPCSTR typedef __nullterminated CONST CHAR *
LPCRECT typedef RECT FAR*
HANDLE typedef void*
HFILE typedef int
规律:貌似前面加不加L都没啥区别.然后P自然就表示指针,C表示是指向常量的指针.加W表示是宽字符指针
LPTSTR 如果在unicode中表示LPWSTR,否则表示LPSTR
LPCTSTR 如果在unicode中表示LPCWSTR,否则表示LPCSTR
//Windows句柄类型HANDLE32位的无符号整数,用于标识
窗口句柄 HWND
实例句柄 HINSTANCE
光标句柄 HCURSOR
图标句柄 HICON
位图句柄 HBITMAP
菜单句柄 HMENU
设备描述句柄 HDC
钢笔句柄 HPEN
画刷句柄 HBRUSH
字体句柄 HFONT
文件句柄 HFILE
typedef struct tagRECT
{
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECT, *PRECT, NEAR *NPRECT, FAR *LPRECT;
COLORREF DWORD
64位指针问题
define _W64 __w64
#if defined(_WIN64)
typedef __int64 INT_PTR, *PINT_PTR;
typedef unsigned __int64 UINT_PTR, *PUINT_PTR;
typedef __int64 LONG_PTR, *PLONG_PTR;
typedef unsigned __int64 ULONG_PTR, *PULONG_PTR;
#define __int3264 __int64
#else
typedef _W64 int INT_PTR, *PINT_PTR;
typedef _W64 unsigned int UINT_PTR, *PUINT_PTR;
typedef _W64 long LONG_PTR, *PLONG_PTR;
typedef _W64 unsigned long ULONG_PTR, *PULONG_PTR;
#define __int3264 __int32
#endif
typedef LONG_PTR LPARAM;
typedef LONG_PTR LRESULT;
typedef UINT_PTR WPARAM;
上面这一堆都是微软在宏中定义的.我们用的时候只要用到LPARAM ,LRESULT , WPARAM