1. 程式人生 > >Windows資料型別

Windows資料型別

Windows使用typedef#define定了很多新的資料型別,前面幾節中我們已經領略到了。它們雖然多,但是都有規律可循,很多都是對C/C++中資料型別的簡單加工,而且很容易“見名知意”。要想學習Windows程式設計,必須要了解常用的資料型別。

如果你對C語言或者C++的資料型別比較熟悉的話,那麼對於一些基礎的內容這個過程就是慢慢熟悉的過程。

這些資料型別在windows.h標頭檔案中定義:

 1 typedef int                 INT;       /* 整形 */
 2 typedef unsigned int        UINT;      /* 無符號整形 
*/ 3 typedef unsigned int *PUINT; /* 無符號整形指標 */ 4 typedef int BOOL; /* 布林型別 */ 5 typedef unsigned char BYTE; /* 位元組 */ 6 typedef unsigned short WORD; /* WORD (無符號短整型) */ 7 typedef unsigned long DWORD; /* DOUBLE WORD (無符號長整形)*/ 8 typedef float
FLOAT; /* 浮點型 */ 9 typedef FLOAT *PFLOAT; /* 指向float型別指標 */ 10 typedef BOOL near *PBOOL; /* 指向布林型別指標 */ 11 typedef BOOL far *LPBOOL; 12 typedef BYTE near *PBYTE; /* 指向位元組型別指標 */ 13 typedef BYTE far *LPBYTE; 14 typedef int
near *PINT; /* 整形指標 */ 15 typedef int far *LPINT; 16 typedef WORD near *PWORD; /* 指向WORD型別的指標 */ 17 typedef WORD far *LPWORD; 18 typedef long far *LPLONG; /* 指向長整形的指標 */ 19 typedef DWORD near *PDWORD; /* 指向DWORD型別的指標 */ 20 typedef DWORD far *LPDWORD; 21 typedef void far *LPVOID; /* 指向void型別的指標 */ 22 typedef CONST void far *LPCVOID; /* 指向void型別的常指標 */

簡單說下,大部分型別都沒有什麼離奇的地方,可能很多讀者會對那個 far 和 near 覺得有疑問,實際上 F12 檢視定義會發現他們就定義上方:

1 #define far
2 #define near

看到這裡你是否還是有疑問?其實,這個 far 和 near 只是用來標識變數的新舊的(預處理階段 far 和 near 會被替換成空字串)。 例如 PINT 和 LPINT 實際上都是 int *,只不過一個是老式寫法,一個是新式寫法,這都是為了相容問題。

簡單的看下這些資料型別,就可以總結出:但凡是以 “P” 開頭的都是指標(pointer)型別("LP"是老式寫法)。撇開這些不談,那麼實際上這些 Windows API 常用的一些資料結構跟我們原本所學的 C/C++ 變數差別就是一個 typedef 而已,基礎好的熟悉一下就行了。不過,也不要想得這麼簡單,Windows 程式設計還有一些比較複雜的型別比如 HWND、HANDLE 等。

在碰到不熟悉的型別時請熟練的使用 “右鍵轉到定義” 或者 F12。 大家不用太過害怕這些複雜的型別名稱,Windows 資料型別並不是內建的資料型別型別,而都是從C型別重定義得到的。

Windows 資料型別名命名的規律

    • 無符號型別:一般是以“U”開頭,比如“INT”對應的“UINT”。
    • 指標型別:其指向的資料型別前加“LP”或“P”,比如指向 DWORD 的指標型別為“LPDWORD”和“PDWORD”。
    • 控制代碼型別:以“H”開頭。比如,HWND 是window(WND簡寫)也就是視窗的控制代碼,選單(MENU)型別對應的控制代碼型別為 “HMENU” 等等。