实时消息抽取循环


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值