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++,后果么,俺才浅识陋,实在想不出来。

猜你喜欢

转载自blog.csdn.net/dengrk/article/details/1947345