MFC基礎資料型別 (Elementary Data Type)

來源:互聯網
上載者:User
文章目錄
  • MFC中的指標類型
  • 64位指標問題

剛接觸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

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.