Condividi tramite


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

Vedere anche

Riferimenti

Classe CWnd

Grafico delle gerarchie

WM_TIMER

CWnd::KillTimer

SetTimer