MFC常用各种数据类型

MFC常用数据类型:

1、
UINT   A 16-bit unsigned integer on Windows versions 3.0 and 3.1; a 32-bit unsigned integer on Win32.
定义原型:
typedef unsigned int        UINT;

2、
bool应该是C语言里定义的,返回值为true和false(事实上就上1和0)   
    
BOOL应该是MFC及SDK里定义返回值的.   
它的定义应该是:typedef   int   BOOL;(WINDEF.H中定义)   
也就是说它是int型的   
返回值是大写的TRUE   和FALSE   
定义如下:   
#define   FALSE       0   
#define   TRUE        1   
(AFX.H中如此定义)  

3、
BSTR   A 32-bit character pointer 32位的字符指针。
定义原型:
#if defined(WIN32) && !defined(OLE2ANSI)
typedef WCHAR OLECHAR;
#else
typedef char OLECHAR;
#endif
typedef OLECHAR* BSTR;

4、
BYTE   An 8-bit integer that is not signed.无符号8位整数。注意整数和整型int不一样。
定义原型:
typedef unsigned char       BYTE;

5、
COLORREF   A 32-bit value used as a color value.
定义原型:
typedef DWORD   COLORREF;

6、
DWORD   A 32-bit unsigned integer or the address of a segment and its associated offset.
定义原型:
typedef unsigned long       DWORD;

7、
LONG   A 32-bit signed integer.
定义原型:
typedef long LONG;

8、
LPARAM   A 32-bit value passed as a parameter to a window procedure or callback function.
定义原型:
typedef LONG LPARAM;

9、
LPCSTR   A 32-bit pointer to a constant character string
定义原型:
typedef CONST CHAR *LPCSTR, *PCSTR;

10、
LPSTR   A 32-bit pointer to a character string.
定义原型:
typedef CHAR *LPSTR, *PSTR;

11、
LPCTSTR   A 32-bit pointer to a constant character string that is portable for Unicode and DBCS.
定义原型:
typedef LPCSTR LPCTSTR;

12、
LPTSTR   A 32-bit pointer to a character string that is portable for Unicode and DBCS.
定义原型:
typedef LPSTR PTSTR, LPTSTR;

13、
LPVOID   A 32-bit pointer to an unspecified type.
定义原型:
typedef void far            *LPVOID;

14、
LRESULT   A 32-bit value returned from a window procedure or callback function.
定义原型:
typedef LONG LRESULT;

15、
WNDPROC   A 32-bit pointer to a window procedure.
定义原型:
typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);

16、
WORD   A 16-bit unsigned integer.
定义原型:
typedef unsigned short      WORD;

17、
WPARAM   A value passed as a parameter to a window procedure or callback function: 16 bits on Windows versions 3.0 and 3.1; 32 bits on Win32. 
定义原型:
typedef UINT WPARAM;

18、
POSITION   A value used to denote the position of an element in a collection; used by MFC collection classes.
定义原型:
// abstract iteration position
struct __POSITION { };
typedef __POSITION* POSITION;

19、
LPCRECT   A 32-bit pointer to a constant (nonmodifiable) RECT structure. 
定义原型:
typedef const RECT* LPCRECT;    // pointer to read/only RECT

——————————————————————————————————————————————————————————————————————

刚接触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

原文:http://blog.csdn.net/weiwenhp/article/details/6746719

————————————————————————————————————————————————————————

TO BE CONTINUED !


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值