《Visual C++ 角色扮演遊戲程式設計》-WinLib.h
阿新 • • 發佈:2018-12-09
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