1. 程式人生 > >《Visual C++ 角色扮演遊戲程式設計》-WinLib.h

《Visual C++ 角色扮演遊戲程式設計》-WinLib.h

WinLib.h 《Visual C++ 角色扮演遊戲程式設計》的第三章“windows程式設計”中,作者為了能更簡單的使用Win32 API與C++,封裝了自定義的基礎類庫。作者阪本千尋再次讓我見識到了“飛花摘葉皆可傷人,草木竹石均可為劍”! 在這裡,我把節奏放慢,慢慢看,好好消化。

#define STRICT                  // 由Windows.h所帶出的嚴謹檢查模式
/*
讓編譯器進行嚴格型別檢查.這是條件編譯時需要用的。為了讓預處理指令能進行選擇和變化,
預處理指令依賴的並不是一般的邏輯判斷,而是檢查某個標識是否在以前已經被設定。
要設定某一個標識就要使用“#define”預處理指令。
*/
#define WIN32_LEAN_AND_MEAN //把較少用的定義傳入 /* ↑讓編譯器去除不經常用的標頭檔案(一般包含windows.h要包含一堆用不到的標頭檔案) ↑不載入MFC所需的模組。如果你的工程不使用MFC,就加上這句, ↑這樣一來在編譯連結時,包括最後生成的一些供除錯用的模組時,速度更快,容量更小。 */ #if defined(_MSC_VER) && defined(_DEBUG) #define _CRTDBG_MAP_ALLOC // 確保除錯程式碼所要用的記憶體 /* ↑_CRTDBG_MAP_ALLOC 啟用記憶體洩漏檢查 ↑VS中自帶了記憶體洩露檢測工具,若要啟用記憶體洩露檢測。 ↑#define _CRTDBG_MAP_ALLOC ↑#include <crtdbg.h> ↑它們的先後順序不能改變。通過包括 crtdbg.h,將malloc和free函式對映到其”Debug”版本_malloc_dbg和_free_dbg,這些函式將跟蹤記憶體分配和釋放。 ↑此對映只在除錯版本(在其中定義了_DEBUG)中發生。#define語句將CRT堆函式的基版本對映到對應的”Debug”版本。 */
#endif #include <windows.h> /*一個最重要的標頭檔案,它包含了其他Windows標頭檔案,這些標頭檔案的某些也包含了其他標頭檔案。 WINDEF.H 基本資料型別定義。 WINNT.H 支援Unicode的型別定義。 WINBASE.H Kernel(核心)函式。 WINUSER.H 使用者介面函式。 WINGDI.H 圖形裝置介面函式。 */ #include <stdio.h> /* stdio: standard input&output 表示標準輸入輸出標頭檔案!所以用到標準輸入輸出函式時,就要呼叫這個標頭檔案! */ #include <string.h>
/* 表示包含字串處理函式的標頭檔案,是C語言中的預處理命令。 經該預處理後,可呼叫字串處理函式,例如strlen()函式(求字串長度函式)、strcat()函式(字串拼接函式)、strcmp()函式(字串比較函式)等等 */ #include <stdlib.h> /* stdlib:standard library 標準庫標頭檔案    stdlib標頭檔案裡包含了C、C++語言的最常用的系統函式,該檔案包含了的C語言標準庫函式的定義 stdlib.h裡面定義了五種型別、一些巨集和通用工具函式。 型別例如size_t、wchar_t、div_t、ldiv_t和lldiv_t; 巨集例如EXIT_FAILURE、EXIT_SUCCESS、RAND_MAX和MB_CUR_MAX等等; 常用的函式如malloc()、calloc()、realloc()、free()、system()、atoi()、atol()、rand()、srand()、exit()等等。 */ #if defined(_MSC_VER) && defined(_DEBUG) #include <crtdbg.h> //crtdbg:c run time debug #define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__) #else #define DEBUG_NEW new #endif #include <Application.h> #include <Window.h> #include <dc.h> #include <Dialog.h> #include <Geometry.h> #include <Misc.h> // 在VC++中,這指出連線的程式庫 #ifdef _MSC_VER /* _MSC_VER:Microsoft C Version Microsoft的C編譯器的版本 */ #ifdef _DEBUG #pragma comment(lib, "WinLibD.lib") /* #pragma comment(lib,"xxx.lib") 告訴編譯器你要用到xxx.lib庫 */ #else #pragma comment(lib, "WinLib.lib") #endif #endif