6.1.2 WM_TIMER消息响应 响应定时器发出的WM_TIMER消息有两种方式,第一种是通过SetTimer函数的第四个参数,指定出响应函数。第二种反射就是在消息处理函数中,通过对WM_TIMER消息添加相应响应代码。 通常我们会采取第二种方式,在消息处理函数中对WM_TIMER消息添加相应响应代码。 首先,我们需要在调用SetTimer函数时,把第四个参数取为NULL。 1. SetTimer(hwnd,1,100,NULL); 然后,在消息响应函数中添加相应的响应函数,下面是消息处理函数WndProc()函数中的部分代码: 1. //-------------------【WndProc( )函数】----------------------------------- 2. // 描述:窗口过程函数WndProc,对窗口消息进行处理 3. //---------------------------------------------------------------------- 4. LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam ) 5. { 6. switch( message ) //switch语句开始 7. { 8. case WM_TIMER: //定时器消息 9. Game_Paint(hwnd); //调用Game_Paint()函数进行窗口绘图 10. break; //跳出该switch语句 11. 12. case WM_DESTROY: //若是窗口销毁消息 13. Game_CleanUp(hwnd); //调用自定义的资源清理函数Game_CleanUp()进行退出前的资源清理 14. PostQuitMessage( 0 ); //向系统表明有个线程有终止请求。用来响应WM_DESTROY消息 15. break; //跳出该switch语句 16. 17. default: //若上述case条件都不符合,则执行该default语句 18. return DefWindowProc( hwnd, message, wParam, lParam ); //调用默认的窗口过程 19. } 20. 21. return 0; //正常退出 22. } 关键点在第8~10行,我们在WM_TIMER消息后调用了自定义的绘图函数Game_Paint(),这样程序在每次收到WM_TIMER消息后,就会调用一次Game_Paint()对画面进行重新绘制,从而达到了动画显示的效果。