第一次寫博客,爲了激勵自己學習的動力,寫給自己看

學習c++有段時間了,一直雨裏霧裏,看到了淺墨大神寫的《windows遊戲編程之從零開始》,又激發了我繼續學習的動力,因爲我也打dota,哈哈哈哈!

學到了第三章,創建了一個完整的窗口程序,代碼照着書上抄的,抄了100行,錯了三個地方,兩處拼寫錯誤,一處case條件後面沒加冒號,不過比剛學的時候抄代碼強多了,一個Hello world都能錯好多次。

以後我會持續發我抄的代碼,或者是寫的代碼,以此來督促我持續學習。

下面是抄的代碼,有需要的儘管用


// -------------【程序說明】---------------

//程序名稱:GameCore
//2015年4月28日20:22:31 by 邊哥
// 描述:用代碼勾勒出遊戲開發所需要的程序框架
//---------------------------------------------------


//---------------【頭文件包含部分】------------------
//描述:包含程序所依賴的頭文件-------------------------
//--------------------------------------------
#include<windows.h>


//----------------【宏定義部分】----------------------
//描述:定義一些輔助宏
//---------------------------------------------


#define WINDOW_WIDTH 800 // 爲窗口寬度定義的宏,以方便在此處修改窗口寬度
#define WINDOW_HEIGHT 600 //爲窗口高度定義的宏,以方便在此處修改窗口高度
#define WINDOW_TITLE L"【致我們的遊戲開發夢想】程序核心框架" //爲窗口標題定義的宏


//-------------------【全局函數聲明部分】--------------
//描述:全局函數聲明,防止“未聲明的標識”系列錯誤
//--------------------------------------------------------------
LRESULT CALLBACK WndProc(HWND hwnd, UINT message,WPARAM wParam, LPARAM lParam);// 窗口過程函數


//-------------------【WinMian()函數】------------------------------
//描述:Windows應用程序的入口函數,我們的程序從這開始
//--------------------------------------------------------------------------------
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
//【1】窗口創建四部曲之一:開始設計一個完整的窗口類
WNDCLASSEX wndClass = {0}; //用WINDCLASSEX定義一個窗口類
wndClass.cbSize = sizeof(WNDCLASSEX);// 設置結構體的字節數大小
wndClass.style = CS_HREDRAW | CS_VREDRAW; //設置窗口的樣式
wndClass.lpfnWndProc = WndProc; //設置指向窗口過程函數的指針
wndClass.cbClsExtra = 0; //窗口類的附加內存,取0就可以了
wndClass.cbWndExtra = 0; //窗口的附加內存,依然取0
wndClass.hInstance = hInstance; //指定包含窗口過程的程序的實例句柄
wndClass.hIcon = (HICON)::LoadImage(NULL,L"icon.ico",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE); //本地加載自定義ico圖標
wndClass.hCursor = LoadCursor(NULL, IDC_ARROW); //指定窗口類的光標句柄
wndClass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); //爲hbrBackground成員指定一個灰色畫刷句柄
wndClass.lpszMenuName = NULL; //用一個以空終止的字符串,指定菜單資源的名字
wndClass.lpszClassName = L"ForTheDreamOfGameDevelop"; //用一個以空終止的字符串,指定窗口類的名字


//【2】窗口創建四部曲之二:註冊窗口類
if( !RegisterClassEx( &wndClass ) ) //設計完窗口後,需要對窗口進行註冊,才能創建該類型的窗口
return -1;


//【3】窗口創建四部曲之三:正式創建窗口
HWND hwnd = CreateWindow( L"ForTheDreamOfGameDevelop", WINDOW_TITLE, 
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH, WINDOW_HEIGHT, 
NULL, NULL, hInstance, NULL );


//【4】窗口創建四部曲之四:窗口的移動。顯示與更新
MoveWindow(hwnd,250,80,WINDOW_WIDTH,WINDOW_HEIGHT,true); //調整窗口顯示時的位置,使窗口左上角位於(250,80)處
ShowWindow( hwnd, nShowCmd ); // 調用ShowWindow函數來顯示窗口
UpdateWindow(hwnd); //對窗口進行更新


//【5】消息循環過程
MSG msg = { 0 }; // 定義並初始化msg
while( msg.message != WM_QUIT ) //使用while循環,如果消息不是WM_QUIT消息,就繼續循環
{
if( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) ) // 查看應用程序消息隊列,有消息時將隊列中的消息派發出去
{
TranslateMessage( &msg ); // 將虛擬鍵消息轉換爲字符消息
DispatchMessage( &msg ); //分發一個消息給窗口程序
}
}


//【6】窗口類的註銷
UnregisterClass(L"ForTheDreamOfGameDevelop", wndClass.hInstance); //程序準備結束,註銷窗口類
return 0;
}


//---------------------------【WndProc()函數】------------------------
//描述:窗口過程函數WndProc,對窗口消息進行處理
//--------------------------------------------------------------------
LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch( message ) //switch語句開始
{
case WM_PAINT: //若是客戶區重繪消息
ValidateRect(hwnd, NULL); // 更新客戶區的顯示
break;

case WM_KEYDOWN: //若是鍵盤按下消息
if (wParam == VK_ESCAPE) // 如果按下的是ESC
DestroyWindow(hwnd);
break;


case WM_DESTROY: //若是窗口銷燬消息
PostQuitMessage( 0 ); // 向系統表明有個線程有終止請求,用來響應WM_DESTROY消息
break; //跳出該switc語句


default: //若上述case條件都不符合,則執行該default語句
return DefWindowProc( hwnd, message, wParam, lParam ); //調用默認的窗口過程


}
return 0; // 正常退出
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章