windows程式一般都等待使用者進行一些操作,然後響應並採取行動。
一般來說。對win32的程式的操作都會轉換為系統事件佇列中的訊息,如按鍵訊息wm_keydown,wm_mouseclick等傳遞鍵盤以及滑鼠的操作訊息。
系統訊息傳遞給程式的本地事件佇列。然後在傳遞給winproc()函式進行主窗體的訊息處理,處理完訊息後。程式轉到winmain()主函式中,而此時一般主函式依舊在進行訊息迴圈,於是又等待新的訊息並執行。
win32的程式都是有winmain開始,最簡單的乙個win32程式。從空專案開始:
#define win32_lean_and_mean
#include int winapi winmain(hinstance hinstance,
hinstance hprevinstance,
lpstr lpcmdline,
int ncmdshow)
winmain 函式
messagebox()函式
sdk中乙個簡單的提示聲音的函式 messagebeep(uint utype),引數值utype經常使用的有 mb_ok 系統預設聲音,當然假設你將計算機系統中的系統聲音設定為無聲,就聽不到聲音的。
從乙個空專案開始建立乙個完整的windows程式的步驟:
建立乙個windows類。
建立乙個事件處理程式winproc
向windows註冊建立的windows類:定義了windows類後,還要通過註冊,讓windows作業系統知道這個類,註冊通過函式 registerclas***()來完畢。接收乙個指向windows類的指標作為引數。
呼叫政策函式之前,windows系統還不知道有這個類,因此不能使用新的類名來引用它,而是用但錢儲存的類的實際資料結構來進行註冊。
使用windows類建立乙個窗體
建立乙個主事件迴圈,用於接收windows訊息並將其傳送給事件處理程式。
最後。乙個簡單的空白win32專案**例如以下:
//不載入mfc
#define win32_lean_and_mean
#include #include //windows類類名常量
const char* myclassname = "winclass";
//訊息處理函式
lresult callback wndproc(hwnd hwnd,
uint msg,
wparam wparam,
lparam lparam)
break;
case wm_paint:
break;
case wm_destroy:
break;
default:
return (defwindowproc(hwnd,msg,wparam,lparam));
} return (0);
}//主函式
int winapi winmain(hinstance hinstance,
hinstance hprevinstance,
lpstr lpcmdline,
int ncmdshow)
//建立窗體
0, 0, 400, 500, null, null, hinstance, null) ) )
//進入主迴圈
while( getmessage(&msg,null,0,0) )
//返回到作業系統
return msg.wparam;
}
但這為一般程式的基本結構。對於遊戲。要構建乙個實時事件迴圈,使其既能進行遊戲邏輯處理,比如乙個game_main()函式,又能實時檢測訊息佇列中的訊息並處理。
這裡就要構建乙個實時事件迴圈,使用函式peekmessage () 來檢測訊息佇列中是否有訊息。
假設有。對其進行處理。否則繼續處理其它遊戲邏輯並反覆迴圈。peekmessage 函式原型例如以下:
bool peekmessage(
lpmsg ipmsg, //訊息 的指標
hwnd hwnd,//窗體控制代碼
uint wmsgfiltermin,//第一條訊息
uint wmsgfiltermax,//最後一條訊息
uint wremovemsg//刪除標記
);
一般第一條訊息和最後一條訊息都設為0。而刪除標記有三種:
pm_noremove
peekmessage處理後,訊息不從佇列裡除掉。
pm_remove
peekmessage處理後。訊息從佇列裡除掉。
pm_noyield
此標誌使系統不釋放等待呼叫程式空暇的執行緒。可將pm_noyield任意組合到pm_noremove或pm_remove。
pm_noremove或pm_remove是基本的標記,若使用不刪除訊息,就要配合getmessage()來獲得訊息進行處理。若使用pm_remove。則直接使用peekmessage獲得訊息,相應的實時事件迴圈**例如以下:
while(true)
//主遊戲處理邏輯
game_main();
}
這裡主遊戲處理邏輯必須有返回,即生成乙個動畫幀或執行了一段遊戲邏輯後必須返回。 3D遊戲引擎系列一
筆者介紹 姜雪偉,it公司技術合夥人,it高階講師,csdn 社群專家,特邀編輯,暢銷書作者,國家專利發明人 已出版書籍 手把手教你 架構 3d遊戲引擎 電子工業出版社 和 unity3d 實戰核心技術詳解 電子工業出版社等。為了能讓開發者重視引擎開發,最近一直在寫一些關於學習引擎的一些博文,為此還...
3D手機遊戲引擎
一,寒霜2引擎 frostbite 2 engine 但手機上貌似不支援 二,虛幻3引擎 unreal engine 3 沒用過 三,unity 引擎 本人使用過 以上3d引擎我推測應該都是基於 opengl es2.0圖形庫支援嵌入式裝置。2d手機遊戲引擎 一,cocos2d x cocos2d ...
3D遊戲引擎系列四
筆者介紹 姜雪偉,it公司技術合夥人,it高階講師,csdn社群專家,特邀編輯,暢銷書作者,國家專利發明人 已出版書籍 手把手教你架構3d遊戲引擎 電子工業出版社和 unity3d實戰核心技術詳解 電子工業出版社等。在設計引擎時,首先我們要做的是把整個引擎的框架設計好,引擎設計採用的都是模組化開發,...