CWnd::SetTimer
Instala um timer do sistema.
UINT_PTR SetTimer(
UINT_PTR nIDEvent,
UINT nElapse,
void (CALLBACK* lpfnTimer
)(HWND,
UINT,
UINT_PTR,
DWORD
)
);
Parâmetros
nIDEvent
Especifica um identificador de temporizador diferente de zero. Se o identificador de timer for exclusivo, esse mesmo valor será retornado por SetTimer. Caso contrário, SetTimer determina um novo valor exclusivo e retorna isso. Para um timer de janela (que tem uma função de retorno de chamada NULL), o valor deve ser exclusivo somente para outros timers de janelas associados à janela atual. Para um timer de retorno de chamada, o valor deve ser exclusivo para todos os timers em todos os processos. Portanto, quando você cria um timer de retorno de chamada, é mais provável que o valor retornado seja diferente do valor especificado–.nElapse
Especifica o valor de tempo limite, ou intervalo, em milissegundos.lpfnTimer
Especifica o endereço da função de retorno de chamada TimerProc fornecida pelo aplicativo que processa as mensagens WM_TIMER. Se esse parâmetro for NULL, as mensagens WM_TIMER serão colocadas na fila de mensagens do aplicativo e serão tratadas pelo objeto CWnd.
Valor de retorno
O identificador do novo timer se a função é bem-sucedida. Esse valor pode ou não pode ser igual ao valor passado com o parâmetro nIDEvent. Um aplicativo sempre deve passar o valor de retorno da função de membro de KillTimer para encerrar o temporizador. Diferente de zero se tiver êxito; caso contrário, 0.
Comentários
Um valor de intervalo é especificado, e cada vez que o intervalo decorre, o sistema envia uma mensagem de WM_TIMER à fila de mensagens de instalação do aplicativo de instalação ou passa a mensagem para uma função de retorno de chamada definida pelo aplicativo TimerProc.
A função de retorno de chamada lpfnTimer não precisa ser denominada TimerProc, mas deve ser declarada como estática e ser definida como 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
);
Exemplo
Este exemplo usa CWnd::SetTimer, CWnd::OnTimer e CWnd::KillTimer para tratar mensagens de WM_TIMER. O primeiro timer é configurado para enviar uma mensagem WM_TIMER para a janela do quadro principal a cada 2 segundos em OnStartTimer. O manipulador de eventos OnTimer controla as mensagens do WM_TIMER para a janela de quadro principal. Este método faz com que o alto-falante do PC toque um aviso sonoro a cada 2 segundos. O segundo timer envia uma mensagem à função de retorno de chamada a cada 3,75 segundos. OnStopTimer interromperá dois timers chamando CWnd::KillTimer para cada ID de 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);
}
Requisitos
Cabeçalho: afxwin.h