http://blog.csdn.net/dengrk/article/details/1947345
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
问题: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++,后果么,俺才浅识陋,实在想不出来。