CWnd::SetTimer
Installa un timer di sistema.
UINT_PTR SetTimer(
UINT_PTR nIDEvent,
UINT nElapse,
void (CALLBACK* lpfnTimer
)(HWND,
UINT,
UINT_PTR,
DWORD
)
);
Parametri
nIDEvent
Specifica un identificatore del timer diverso da zero. Se l'identificatore del timer è univoco, questo stesso valore viene restituito da SetTimer. In caso contrario, SetTimer determina un nuovo valore univoco e restituisce quello. Per un timer di finestra (con una funzione di callback NULL), il valore deve essere univoco solo per gli altri timer di finestre associati alla finestra corrente. Per un timer di callback, il valore deve essere univoco per tutti i timer di tutti i processi. Pertanto, quando si crea un timer di callback, è più probabile che il valore restituito sia diverso dal valore specificato.nElapse
Specifica il valore di timeout, o l'intervallo, in millisecondi.lpfnTimer
Specifica l'indirizzo della funzione di callback TimerProc fornita dall'applicazione, che elabora i messaggi WM_TIMER. Se questo parametro è NULL, i messaggi WM_TIMER sono inseriti nella coda di messaggi dell'applicazione e gestiti dall'oggetto CWnd.
Valore restituito
Identificatore del nuovo timer se la funzione ha esito positivo. Questo valore può essere uguale al valore passato al parametro nIDEvent oppure no. Un'applicazione deve passare sempre il valore restituito alla funzione membro KillTimer per interrompere il timer. Diverso da zero se la funzione ha esito positivo; in caso contrario, 0.
Note
Viene specificato valore dell'intervallo e ogni volta che l'intervallo trascorre, il sistema invia un messaggio WM_TIMER alla coda dei messaggi di installazione dell'applicazione in fase di installazione oppure passa il messaggio a una funzione di callback definita dall'applicazione TimerProc.
Non è necessario nominare la funzione di callback lpfnTimer come TimerProc, ma deve essere dichiarata come static e deve essere definita come segue.
void CALLBACK TimerProc(
HWND hWnd, // handle of CWnd that called SetTimer
UINT nMsg, // WM_TIMER
UINT_PTR nIDEvent, // timer identification
DWORD dwTime // system time
);
Esempio
In questo esempio si utilizzano CWnd::SetTimer, CWnd::OnTimer e CWnd::KillTimer per gestire i messaggi WM_TIMER. Il primo timer è configurato per inviare un messaggio WM_TIMER alla finestra cornice principale ogni 2 secondi in OnStartTimer. Il gestore eventi OnTimer gestisce i messaggi WM_TIMER per la finestra cornice principale. Questo metodo genera un segnale acustico dell'altoparlante del PC ogni 2 secondi. Il secondo timer invia un messaggio alla funzione di callback ogni 3,75 secondi. OnStopTimer arresterà entrambi i timer chiamando CWnd::KillTimer per ogni ID del timer
void CMainFrame::OnStartTimer()
{
// This timer uses a WM_TIMER message, not a callback.
// Therefore, the timer is specific to this window.
// m_nWindowTimer is a UINT_PTR field.
m_nWindowTimer = SetTimer(1, 2000, NULL);
// For this demo, we specify an interval that won't overlap
// with the window timer.
m_nCallbackTimer = SetTimer(2, 3750, &CMainFrame::MyTimerProc);
// See whether we got the ID we requested in the first parameter.
#ifdef _DEBUG
CString str;
str.Format(_T("m_ncallbackTImer ID = %d"), m_nCallbackTimer);
TRACE(str);
#endif
}
void CALLBACK CMainFrame::MyTimerProc(
HWND hWnd, // handle of CWnd that called SetTimer
UINT nMsg, // WM_TIMER
UINT_PTR nIDEvent, // timer identification
DWORD dwTime // system time
)
{
MessageBeep(0x00000030L); // Windows question sound.
}
void CMainFrame::OnStopTimer()
{
KillTimer(m_nWindowTimer);
KillTimer(m_nCallbackTimer);
}
void CMainFrame::OnTimer(UINT nIDEvent)
{
MessageBeep(0xFFFFFFFF); // Beep
// Call base class handler.
CMDIFrameWnd::OnTimer(nIDEvent);
}
Requisiti
Intestazione: afxwin.h