第五节 定时器使用

第五节 定时器使用

命令消息:WM_TIMER

1->发送定时器消息 SetTimer(hwnd,1,60000,NULL). 

       UINT_PTR SetTimer(

  HWND hWnd, // 窗口句柄

  UINT_PTR nIDEvent, // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器

  UINT uElapse, // 时间间隔,单位为毫秒

  TIMERPROC lpTimerFunc // 回调函数

)

SetTimer 因为在MFC程序中SetTimer被封装在CWnd类中,调用就不用指定窗口句柄了 于是SetTimer函数的原型变为:

  UINT SetTimer(UINT nIDEvent,

UINT nElapse

,void(CALLBACK EXPORT *lpfnTimer)

(HWND,UINT ,YINT ,DWORD))

2->通过添加消息处理函数WM_TIMER 来处理

3->消灭定时器消息 KillTimer (hwnd, 1) ;

在任何时刻停止WM_TIMER消息(即使正在处理WM_TIMER消息)。此函数的第二个参数是SetTimer呼叫中所用的同一个定时器ID。在终止程序之前,您应该响应WM_DESTROY消息停止任何活动的定时器。

当您的窗口消息处理程序收到一个WM_TIMER消息时,wParam参数等于定时器的ID值(上述情形为1),lParam参数为0。如果需要设定多个定时器,那么对每个定时器都使用不同的定时器ID。wParam的值将随传递到窗口消息处理程序的WM_TIMER消息的不同而不同。为了使程序更具有可读性,您可以使用#define叙述定义不同的定时器ID

4->设置多个定时器 #define TIMER_SEC 1       #define TIMER_MIN 2

SetTimer (hwnd, TIMER_SEC, 1000, NULL) ;   SetTimer (hwnd, TIMER_MIN, 60000, NULL) ;

5->多个定时器处理 caseWM_TIMER:  //普通函数处理
        switch (wParam)
  {
  case TIMER_SEC:
      //每秒一次的处理
     break ;
  case TIMER_MIN:
   //每分钟一次的处理
   break ;
 }

6->回调函数处理 设定定时器的第一种方法是把WM_TIMER消息发送到通常的窗口消息处理程序,而第二种方法是让Windows直接将定时器消息发送给您程序的另一个函数 //只处理WM_TIMER消息

VOID CALLBACK TimerProc (  HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime)
{
  处理WM_TIMER消息
 }
7->启动回调函数SetTimer (hwnd, iTimerID, iMsecInterval, TimerProc) ;

你可能感兴趣的:(第五节 定时器使用)