VC++ MFC 定時器應用

MFC定時器應用


一、啓動定時器

void CP423Dlg::OnStarttimer() 
{
// TODO: Add your control notification handler code here
// m_nTimer = SetTimer(1, 5000, TimerProc);       ① 如果啓動成功的話,m_nTimer = 1
m_nTimer = SetTimer(2, 5000, NULL);              ② 如果啓動成功的話,m_nTimer = 2

}

定時器處理函數

有兩種類型,且只能選擇其中一種,兩個函數不能同時用

① 定義全局函數

1)在.h中進行聲明:

void CALLBACK EXPORT TimerProc(
   HWND hWnd,      // handle of CWnd that called SetTimer
   UINT nMsg,      // WM_TIMER
   UINT nIDEvent,   // timer identification
   DWORD dwTime    // system time
   );
   
2)在.cpp中實現:

void CALLBACK EXPORT TimerProc(
   HWND hWnd,      // handle of CWnd that called SetTimer
   UINT nMsg,      // WM_TIMER
   UINT nIDEvent,   // timer identification
   DWORD dwTime    // system time
   )
   
{
if (nIDEvent==1)
{
theApp.m_pMainWnd->MessageBox("abc");

}
}

② 消息處理函數
 
添加消息WM_Timer處理函數
void CP423Dlg::OnTimer(UINT nIDEvent) 
{
// TODO: Add your message handler code here and/or call default
MessageBox("ontimer");
CDialog::OnTimer(nIDEvent);
}

二、停止定時器


void CP423Dlg::OnStoptimer() 
{
// TODO: Add your control notification handler code here
KillTimer(m_nTimer);   

}



定時器說明

CWnd::SetTimer

UINT SetTimer( UINT nIDEvent, UINT nElapse, void (CALLBACK EXPORT* lpfnTimer)(HWND, UINT, UINT, DWORD) );

Return Value

The timer identifier of the new timer if the function is successful. An application passes this value to the KillTimer member function to kill the timer. Nonzero if successful; otherwise 0.

Parameters

nIDEvent

Specifies a nonzero timer identifier.

nElapse

Specifies the time-out value, in milliseconds.

lpfnTimer

Specifies the address of the application-supplied TimerProc callback function that processes the WM_TIMER messages. If this parameter is NULL, the WM_TIMER messages are placed in the application’s message queue and handled by the CWnd object.

Remarks

Installs a system timer. A time-out value is specified, and every time a time-out occurs, the system posts a WM_TIMER message to the installing application’s message queue or passes the message to an application-defined TimerProc callback function.

The lpfnTimer callback function need not be named TimerProc, but it must be defined as follows:

void CALLBACK EXPORT TimerProc(
   HWND hWnd,      // handle of CWnd that called SetTimer
   UINT nMsg,      // WM_TIMER
   UINT nIDEvent   // timer identification
   DWORD dwTime    // system time
);

Timers are a limited global resource; therefore it is important that an application check the value returned by the SetTimer member function to verify that a timer is actually available.

Example

// This example shows how to use CWnd::SetTimer, CWnd::KillTimer, and how to handle WM_TIMER messages. A timer is set up to send a WM_TIMER message to the main frame window every 2 seconds in OnStartTimer(). OnStopTimer will stop the timer by calling CWnd::KillTimer. OnTimer was set up through class wizard to handle WM_TIMER messages for the main frame window.  In this example the PC speaker will beep every 2 seconds.

void CMainFrame::OnStartTimer() 
{
   m_nTimer = SetTimer(1, 2000, 0);
}

void CMainFrame::OnStopTimer() 
{
   KillTimer(m_nTimer);   
}

void CMainFrame::OnTimer(UINT nIDEvent) 
{
   MessageBeep(0xFFFFFFFF);   // Beep

   // Call base class handler.
   CMDIFrameWnd::OnTimer(nIDEvent);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章