现在的位置: 首页 > 综合 > 正文

实时消息抽取循环

2014年03月19日 ⁄ 综合 ⁄ 共 3187字 ⁄ 字号 评论关闭

     怎样在屏幕上连续不断显示图形来催眠用户呢?仅用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(), 则当队列中没有消息时,程序将会一闪而过. 因此实际的程序中需要
更强健的设计.

抱歉!评论已关闭.