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言里定,返回值为truefalse(上就上10)  
   
BOOL
应该MFCSDK里定返回.  
它的定义应该是: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

 问题:1.为什么微软不用STL中Iterator的方法来写这个POSITION类?  
  2.既然不用Iterator,那么用void   *类型也是可以,为什么不用?  
  3.c++怎么来看待空结构,有什么具体的用法和技巧?

答: 1.因为历史原因,mfc的开发人员并不知道如何实现数据结构和算法分离的技术,所以没有使用Iterator  
  2.所以在当时的情况下,也只有尽可能的使用强类型POSTION来代替void   *

在MFC4.0以前的版本中,POSITION实际上就是一个void指针。在5.0中的定义大概是:  
  struct   __POSITION   {   int   unused;   }   ;  
  typedef   __POSITION   *   POSITION   ;  
  6.0中才变为:  
  struct   __POSITION   {     }   ;  
  typedef   __POSITION   *   POSITION   ;  
  虽然结构内没有成员变量,但指向结构的指针仍需要4字节----32位机中天下的指针都是这个长度滴!  
   
  这样做的目的仅是为了类型安全。对于POSITION参数,使用者很容易传错,特别是当表中元素是void   *时,此时很有可能在需要元素的地方传入POSITION,而在需要POSITION的地方传入void   *。当做上面的定义中,编译器就可以检查出这种错误。  
   
  在MFC内部,POSITION实际上指向CNode类型。

MFC一直就没打算封装数据结构与算法。它只关心商业上的最有可能应用到的东西。  
  POSITION其实也有某些迭代器的特征,只是没有使用它的适合多个容器的通用算法。  
  STL对MFC来说是绝对的晚辈,就不要指望它继承STL的一切思想了。  
  另外,MFC/STL中任何一门搞精都很了不起了,都是大牛牛。横向比较没得多大意思,存在就是合理的。今天知道了STL就大贬MFC,明天知道了C#就抵制C++,后果么,俺才浅识陋,实在想不出来。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值