VC定时器的用法实例详解
本文实例讲述了VC中定时器的用法,分享给大家供大家参考。具体用法分析如下:
定时器在VC中的使用频繁,其原型为:
WINUSERAPIUINTWINAPISetTimer(HWNDhWnd,UINTnIDEvent,UINTuElapse,TIMERPROClpTimerFunc);
其中的参数用法如下:
hWnd 是欲设置定时器的窗体句柄。定时时间到时,系统会向该窗体发送WM_TIMER消息。
nIDEvent 定时器标识符。在一个窗体内可以使用多个定时器,不同的定时器根据nIDEvent来区分。
uElapse 定时时间,单位是毫秒。
lpTimerFunc 定时器的回调函数。如果该值为NULL,定时时间到时,定时器发送的消息WM_TIMER由窗体映像该消息的函数处理;否则由回调函数处理,说白一点,回调函数就是取代OnTimer的处理函数。
通常,我们在使用定时器时,只用到三个参数,即
UINTCWnd::SetTimer( UINTnIDEvent, UINTnElapse, void(CALLBACKEXPORT*lpfnTimer)( HWND,UINT,UINT,DWORD));
其实,这个函数只是MFC对API的封装,其实现函数为:
_AFXWIN_INLINEUINTCWnd::SetTimer(UINTnIDEvent,UINTnElapse, void(CALLBACK*lpfnTimer)(HWND,UINT,UINT,DWORD)) { ASSERT(::IsWindow(m_hWnd)); return::SetTimer(m_hWnd,nIDEvent,nElapse, (TIMERPROC)lpfnTimer); }
由此可见,CWnd::SetTimer只是将API函数SetTimer的第一个参数设置成它自己的句柄而已。
有了上面的认识,对定时器的使用就清楚了,下面举例说明定时器的具体使用。
1.打开VC,新建一基于对话框的工程,工程名为Test。在对话框上添加一按钮,将其ID改为IDC_BUTTON_START,Caption改为Start.映像该按钮的BN_CLICKED消息,voidCTestDlg::OnButtonStart();
2.再在对话框上添加一按钮,ID为ID_BUTTON_STOP,Caption改为Stop,映像消息为voidCTestDlg::OnButtonStop();
3.添加一个Lable,ID改为IDC_STATIC_TIME,用于记数,表明定时器函数的执行。
4.映像对话框的WM_TIMER消息,voidCTestDlg::OnTimer(UINTnIDEvent);
BEGIN_MESSAGE_MAP(CAssistantDlg,CDialog)
ON_WM_TIMER()
END_MESSAGE_MAP()
以上的定现函数如下所示:
voidCTestDlg::OnButtonStart() { SetTimer(1,1000,NULL);//启动定时器1,定时时间是1秒 }
voidCTestDlg::OnButtonStop() { KillTimer(1); //关闭定时器1。 }
voidCTestDlg::OnTimer(UINTnIDEvent) { staticintnTimer=0; CStringstrTmp=""; strTmp.Format("Timer:%d",nTimer++); CWnd*pWnd=GetDlgItem(IDC_STATIC_TIME); pWnd->SetWindowText(strTmp); 将Lable中设置新值,表明定时器已经工作。 CDialog::OnTimer(nIDEvent); }