MFC基本数据类型

刚接触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中与之对应的是

NULL           0
VOID            void

BOOL           int


CHAR           char
CCHAR         char
UCHAR        unsigned char
BYTE           unsigned char
WCHAR        wchar_t
_TCHAR        wchar_t

SHORT         short
WORD          unsigned short 
USHORT       unsigned short 

INT               int
UINT            unsigned int

LONG           long
DWORD       unsigned long
ULONG        unsigned long
LONGLONG  __int64
ULONGLONG unsigned __int64
 
FLOAT           float
DOUBLE       double
 
 

MFC中的指针类型

注意:据说far ,near等关键字在16位的系统上有用处,在32位上没啥用处.
 
数据类型                                              含义
 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值