實時消息抽取循環


     怎樣在屏幕上連續不斷顯示圖形來催眠用戶呢?僅用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(), 則當隊列中沒有消息時,程序將會一閃而過. 因此實際的程序中需要
更強健的設計.

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