MFC常用的数据类型

  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

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

L表示long指针, 这是为了兼容Windows 3.1等16位操作系统遗留下来的, 在win32中以及其他的32为操作系统中, long指针和near指针及far修饰符都是为了兼容的作用。没有实际意义。
P表示这是一个指针
C表示是一个常量
T在Win32环境中, 有一个_T宏, 这个宏用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏, 那么这个字符或者字符串将被作为UNICODE字符串, 否则就是标准的ANSI字符串。
STR表示这个变量是一个字符串。
所以LPCTSTR就表示一个指向常固定地址的可以根据一些宏定义改变语义的字符串。
同样, LPCSTR就只能是一个ANSI字符串, 在程序中我们大部分时间要使用带T的类型定义。
LPCTSTR == const TCHAR *

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值