WM_TIMER消息和WM_PAINT消息都是低优先级的

Windows对WM_TIMER消息的处理非常类似于对WM_PAINT消息的处理,这两个消息都是低优先级的,程序只有在消息队列中没有其它消息时才接收它们。

WM_TIMER还在另一方面和WM_PAINT相似:Windows不能持续向消息队列中放入多个WM_TIMER消息,而是将多余的WM_TIMER消息组合成一个消息。因此,应用程序不会一次收到多个这样的消息,尽管可能在短时间内得到两个WM_TIMER消息。应用程序不能确定这种处理方式所导致的WM_TIMER消息「遗漏」的数目。

.elseif eax==WM_TIMER mov eax,wParam ;********************************** ;这个定时器消息定时刷新屏幕 ;********************************** .if ax==ID_TIMER invoke InvalidateRect,hWnd,NULL,NULL ;********************************** ;这个定时器消息实现方块自动下落 ;********************************** .elseif ax==ID_TIMER1 invoke _Down ;********************************** ;这几个定时器消息为按键按下时设定的 ;********************************** .elseif ax==ID_TIMER2 invoke _Down ;收到定时器消息时表示按键是长按不放 .elseif ax==ID_TIMER3 invoke _left ;收到定时器消息时表示按键是长按不放 .elseif ax==ID_TIMER4 invoke _right ;收到定时器消息时表示按键是长按不放 .endif .elseif eax==WM_KEYDOWN ;****************************************************************************** ;有键按下时,分别处理不同的按键。在处理VK_KEYDOWN时,分别设定了几个100ms的定时器, ;并在VK_KEYUP中删除这些定时器,这样的话在有键按下但还没抬起之前定时器会发送消息, ;WM_TIME消息中将根据定时器ID号分别处理这些消息,这种做法可以加速方块的移动。 ;****************************************************************************** mov eax,wParam .if ax==VK_DOWN invoke _Down invoke SetTimer,hWnd,ID_TIMER2,100,NULL ;建立定时器延时100ms .elseif ax==VK_LEFT invoke _left invoke SetTimer,hWnd,ID_TIMER3,100,NULL ;建立定时器延时100ms .elseif ax==VK_RIGHT invoke _right invoke SetTimer,hWnd,ID_TIMER4,100,NULL ;建立定时器延时100ms .elseif ax==VK_UP invoke _rotate ;**************************** ;按下空格键加速瞬间下落到底 ;**************************** .elseif ax==VK_SPACE .while 1 invoke _Down .if eax==0 .break .endif .endw .endif .elseif eax==WM_KEYUP ;****************************************************************************** ;删除了按下时设定的定时器 ;****************************************************************************** mov eax,wParam .if ax==VK_DOWN invoke KillTimer,hWnd,ID_TIMER2 ;删除VK_DOWN按下时设定的定时器 .elseif ax==VK_LEFT invoke KillTimer,hWnd,ID_TIMER3 ;删除VK_LEFT按下时设定的定时器 .elseif ax==VK_RIGHT invoke KillTimer,hWnd,ID_TIMER4 ;删除VK_RIGHT按下时设定的定时器 .endif
03-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值