1. 程式人生 > >《逐夢旅程:Windows遊戲編程之從零開始》學習筆記之二:GDI框架

《逐夢旅程:Windows遊戲編程之從零開始》學習筆記之二:GDI框架

register 開發 操作 程序 turn use 繪制 cal 完整

  1 //===========================================【程序說明】===================================
  2 //    2018_3_5
  3 //    描述:實現GDI遊戲開發所需要的核心程序
  4 //==========================================================================================
  5 
  6 //===========================================【頭文件包含部分】=============================
7 // 描述:包含程序所依賴的頭文件 8 //========================================================================================== 9 10 #include <Windows.h> 11 12 //==============================================【庫文件包含部分】========================== 13 // 描述:包含程序所依賴的庫文件 14 //==========================================================================================
15 16 17 //=============================================【宏定義】==================================== 18 // 描述:定義一些輔助宏 19 //=========================================================================================== 20 21 #define WINDOW_WIDTH 800 //為窗口寬度定義的宏,以方便在此處修改窗口寬度 22 #define WINDOW_HEIGHT 600 //
為窗口高度定義的宏,以方便在此處修改窗口高度 23 #define WINDOW_TITLE L"【致我們永不磨滅的夢想】GDI程序框架" //為窗口標題定義的宏,以方便在此處修改窗口標題 24 25 //===========================================【全局變量聲明】===================================== 26 // 描述:全局變量聲明 27 //================================================================================================ 28 29 HDC g_hdc = NULL; //全局設備環境句柄 30 31 //================================================【全局函數聲明】============================ 32 // 描述:全局函數聲明,防止“未聲明的標識”系列錯誤 33 //============================================================================================ 34 35 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); //窗口過程函數 36 37 BOOL Game_Init(HWND hWnd); //在此函數中進行資源的初始化 38 void Game_Paint(HWND hWnd); //在此函數中進行繪圖代碼的書寫 39 BOOL Game_CleanUp(HWND hWnd); //在此函數中進行資源的清理 40 41 //=================================================【WinMain()函數】============================== 42 // 描述:WINDOW應用程序的入口函數,我們的程序從這裏開始 43 //================================================================================================= 44 45 int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd ) 46 { 47 //【1】窗口創建四部曲之一:開始設計一個完整的窗口類 48 49 WNDCLASSEX wndClass = { 0 }; //用WINDCLASSEX定義一個窗口類 50 wndClass.cbSize = sizeof( WNDCLASSEX ); //設置結構體的字節數大小 51 wndClass.style = CS_HREDRAW | CS_VREDRAW; //設置窗口的樣式 52 wndClass.lpfnWndProc = WndProc; //設置只想窗口過程函數的指針 53 wndClass.cbClsExtra = 0; //窗口類的附加內存,取0即可 54 wndClass.cbWndExtra = 0; //窗口的附加內存,取0即可 55 wndClass.hInstance = hInstance; //指定包含窗口過程的程序的實例句柄 56 wndClass.hIcon = (HICON)::LoadImage(NULL, L"icon.ico", IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE); //本地加載自定義ico圖標 57 wndClass.hCursor = LoadCursor(NULL, IDC_ARROW); //制定窗口類的光標句柄 58 wndClass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); //為hbrBackground成員指定一個灰色畫刷句柄 59 wndClass.lpszMenuName = NULL; //用一個以空終止的字符串,指定菜單資源的名字 60 wndClass.lpszClassName = L"ForTheDreamOfGameDevelop"; //用一個以空終止的字符串,指定窗口類的名字 61 62 //HICON hIconSm; 63 64 //【2】窗口常見四部曲之二:註冊窗口類 65 66 if(!RegisterClassEx(&wndClass)) //設計完窗口後,需要對窗口類進行註冊,這樣才能創建該類型的窗口 67 { 68 return -1; 69 } 70 71 //【3】窗口創建四部曲之三:正式創建窗口 72 73 HWND hWnd = CreateWindow(L"ForTheDreamOfGameDevelop",WINDOW_TITLE, 74 WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH, 75 WINDOW_HEIGHT, NULL, NULL, hInstance, NULL 76 ); 77 78 //【4】窗口創建四部曲之四:窗口的移動、顯示與更新 79 80 MoveWindow(hWnd, 250, 80, WINDOW_WIDTH, WINDOW_HEIGHT, true); //調整窗口顯示時的位置,使窗口左上角位於(250, 80)處 81 82 ShowWindow(hWnd, nShowCmd); //調用此函數顯示窗口 83 84 UpdateWindow(hWnd); //對窗口進行更新,就像我們買了新房裝修 85 86 //【5】消息循環過程 87 88 MSG msg = {0}; //定義並初始化msg 89 while (msg.message != WM_QUIT) //使用while循環,如果雄安喜不是WM_QUIT消息,就繼續循環 90 { 91 if(PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) //查看應用程序消息隊列,有消息時從隊列中的消息派發出去 92 { 93 TranslateMessage(&msg); //將虛擬鍵消息轉換為字符消息 94 DispatchMessage(&msg); //分發一個雄安喜給窗口程序 95 } 96 } 97 98 //【6】窗口類的註銷 99 100 UnregisterClass(L"ForTheDreamOfGameDevelop", wndClass.hInstance); //程序轉杯結束,註銷窗口類 101 102 return 0; 103 } 104 105 //=========================================【WndProc()函數】===================================== 106 // 描述:窗口過程函數wndproc對敞口消息進行處理 107 //=============================================================================================== 108 109 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 110 { 111 PAINTSTRUCT paintStruct; //定義一個PAINTSTRUCT結構體來記錄一些繪制信息 112 113 switch(message) //seitch語句開始 114 { 115 case WM_PAINT: // 若是客戶區重繪消息 116 g_hdc = BeginPaint(hWnd, &paintStruct); //指定窗口進行繪制工作的準備,並用將和繪圖有關的信息填充到paintStruct結構體中 117 Game_Paint(hWnd); 118 EndPaint(hWnd, &paintStruct); //paintStruct函數標記制定窗口的繪畫過程結束 119 ValidateRect(hWnd, NULL); // 更新客戶區的顯示 120 break; 121 122 case WM_KEYDOWN: // 若是鍵盤按下消息 123 if(wParam == VK_ESCAPE) // 如果被按下的鍵是ESC 124 { 125 DestroyWindow(hWnd); // 銷毀窗口, 並發送一條WM_DESTROY消息 126 127 } 128 break; 129 130 case WM_DESTROY: //若是窗口銷毀消息 131 Game_CleanUp(hWnd);//調用自定義的資源清理函數Game_CleanUp()進行退出前的資源清理 132 PostQuitMessage(0); //向系統表明有個線程有終止請求。用來響應WM_DESTROY消息 133 break; 134 135 default: //若上述case條件都不符合,則執行該default語句 136 return DefWindowProc(hWnd, message, wParam, lParam); //調用缺省的窗口過程 137 } 138 139 return 0; //正常退出 140 } 141 142 //========================================【Game_Init()函數】===================================== 143 // 描述:初始化函數,進行一些簡單的初始化 144 //================================================================================================ 145 146 BOOL Game_Init(HWND hWnd) //在此函數中進行資源的初始化 147 { 148 g_hdc = GetDC(hWnd); //獲取設設備環境句柄 149 Game_Paint(hWnd); 150 ReleaseDC(hWnd, g_hdc); //釋放設備環境 151 return TRUE; 152 } 153 154 //========================================【Game_Paint()函數】==================================== 155 // 描述:繪制函數,在此函數中進行繪制操作 156 //================================================================================================ 157 158 void Game_Paint(HWND hWnd) //在此函數中進行繪圖代碼的書寫 159 { 160 161 } 162 163 //========================================【Game_CleanUp()函數】================================== 164 // 描述:資源清理函數,在此函數中進行退出前資源的清理工作 165 //================================================================================================ 166 167 BOOL Game_CleanUp(HWND hWnd) 168 { 169 return TRUE; 170 }

並添加相應資源圖片到工程文件夾中。

《逐夢旅程:Windows遊戲編程之從零開始》學習筆記之二:GDI框架