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 *

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章