怎樣在屏幕上連續不斷顯示圖形來催眠用戶呢?僅用GetMessage()是辦不到的。
如果消息隊列中沒有消息,GetMessage()就會等待,直到新的消息出現在隊列中。
因爲許多遊戲是充滿動作的,需要猛擊鍵盤,產生場景變化,利用簡單的GetMessage()
通常不能符合要求,遊戲編程者不希望玩家在沒有新的動作是遊戲靜止不動,他們希望
怪獸從後面衝出來,圍攻玩家,追捕玩家。爲了做到這樣的效果,需要這樣一種消息
循環:只有遇到需要處理的消息時纔去處理消息,其餘的時間都讓遊戲代碼自動產生
激烈的場面。爲了做到這一點需要用到PeekMessage()函數。
PeekMessage (From MSDN)
The PeekMessage function checks a thread message queue for a message and
places the message (if any) in the specified structure.
BOOL PeekMessage(
LPMSG lpMsg, // pointer to structure for message
HWND hWnd, // handle to window
UINT wMsgFilterMin, // first message
UINT wMsgFilterMax, // last message
UINT wRemoveMsg // removal flags
);
PeekMessage()函數和GetMessage()函數很相,惟一不同的是最後個參數: wRemoveMsg;
它的值可以是: PM_NOREMOVE--表示消息處理後仍留在消息隊列中;
PM_REMOVE--表示消息處理後從隊列中移去。 通常選擇使用後者。
若隊列中有消息,PeekMessage()將返回true;
若隊列中無消息,PeekMessage()將返回false;
要創建實時消息的抽取循環,就需要更復雜一些. 若只是簡單的把GetMessage()替換爲
PeekMessage(), 則當隊列中沒有消息時,程序將會一閃而過. 因此實際的程序中需要
更強健的設計.