文章目錄
剛接觸MFC的人一看到裡面各種各樣的關鍵字肯定傻眼了.彷彿完全是另外一門語言了.因為MFC中把C++中的基礎資料型別 (Elementary Data Type)的關鍵字全改了一遍.這還不算變態,因為只是把小字改成大寫.比較變態的是MFC裡面是很多五花八門的類型實際上對應的是同一種基本類型.就算這樣嘛多花點時間也還能熟悉.更加變態的是它還用自己的類型再定義其他類型.所以這些事都是用typedef這個宏乾的.所以MFC裡面到處是一堆堆的宏.
(實際上準確的說很多類型是Windows API的資料類型,只不過有時在MFC用起來也混淆了.也不用去區分到底是MFC的還是API的了,反正MFC說到底也只是通過OO手段對API的封裝罷了)
閑話少說,先來看下C++中有些啥基礎資料型別 (Elementary Data Type)
******************************************************************************************************
類 型 位元組數
bool 1
char 1
wchar_t 2 (寬字元類型,儲存Unicode代碼值.用法wchart_t letter = L'a')
short 2
unsigned short 2 (unsigned 表示無符號,只能取非負數.unsigned short num = 123U ; //數字後面的U可加可不加)
int 4 (整形預設為int,long型需在後加L,如long lNumber = 123L; //L可加可不加)
unsigned int 4 (可簡寫為unsigned)
long 4 (貌似不同的編譯器中不一樣,有時會是8,偶也不太確定)
__int64 8
unsigned long 4
float 4
double 8
long double 8 (有些地方貌似是12)
******************************************************************************************************
MFC中與之對應的是
NULL 0VOID void
BOOL int
CHAR charCCHAR charUCHAR unsigned charBYTE unsigned charWCHAR wchar_t_TCHAR wchar_tSHORT shortWORD unsigned short USHORT unsigned short INT intUINT unsigned intLONG longDWORD unsigned longULONG unsigned longLONGLONG __int64ULONGLONG unsigned __int64 FLOAT floatDOUBLE double MFC中的指標類型注意:據說far ,near等關鍵字在16位的系統上有用處,在32位上沒啥用處. 資料類型 含義
LPVOID typedef void far *
LPCVOID typedef CONST void far *
PWSTR , LPWSTR __nullterminated WCHAR *
PCWSTR ,LPCSWTR __nullterminated CONST WCHAR *
PTSTR,LPTSTR LPWSTR
PCTSTR , LPCTSTR LPCWSTR
BSTR wchar_t字元指標.原因: 1.typedef OLECHAR *BSTR 2.typedef WCHAR OLECHAR 3.typedef wchar_t WCHAR
一堆宏繞來繞去真他娘的麻煩.
PSTR,LPSTR __nullterminated CHAR *
PCSTR ,LPCSTR typedef __nullterminated CONST CHAR *
LPCRECT typedef RECT FAR*
HANDLE typedef void*
HFILE typedef int
規律:貌似前面加不加L都沒啥區別.然後P自然就表示指標,C表示是指向常量的指標.加W表示是寬字元指標
LPTSTR 如果在unicode中表示LPWSTR,否則表示LPSTR
LPCTSTR 如果在unicode中表示LPCWSTR,否則表示LPCSTR
//Windows控制代碼類型HANDLE32位的不帶正負號的整數,用於標識
視窗控制代碼 HWND
執行個體控制代碼 HINSTANCE
游標控制代碼 HCURSOR
表徵圖控制代碼 HICON
位元影像控制代碼 HBITMAP
菜單控制代碼 HMENU
裝置描述控制代碼 HDC
鋼筆控制代碼 HPEN
畫刷控制代碼 HBRUSH
字型控制代碼 HFONT
檔案控制代碼 HFILE
typedef struct tagRECT
{
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECT, *PRECT, NEAR *NPRECT, FAR *LPRECT;
COLORREF DWORD
64位指標問題
define _W64 __w64
#if defined(_WIN64)
typedef __int64 INT_PTR, *PINT_PTR;
typedef unsigned __int64 UINT_PTR, *PUINT_PTR;
typedef __int64 LONG_PTR, *PLONG_PTR;
typedef unsigned __int64 ULONG_PTR, *PULONG_PTR;
#define __int3264 __int64
#else
typedef _W64 int INT_PTR, *PINT_PTR;
typedef _W64 unsigned int UINT_PTR, *PUINT_PTR;
typedef _W64 long LONG_PTR, *PLONG_PTR;
typedef _W64 unsigned long ULONG_PTR, *PULONG_PTR;
#define __int3264 __int32
#endif
typedef LONG_PTR LPARAM;
typedef LONG_PTR LRESULT;
typedef UINT_PTR WPARAM;
上面這一堆都是微軟在宏中定義的.我們用的時候只要用到LPARAM ,LRESULT , WPARAM