CWnd::SetTimer
Nainstaluje časovač systému.
UINT_PTR SetTimer(
UINT_PTR nIDEvent,
UINT nElapse,
void (CALLBACK* lpfnTimer
)(HWND,
UINT,
UINT_PTR,
DWORD
)
);
Parametry
nIDEvent
Určuje identifikátor nenulového časovače.Pokud je identifikátor časovače jedinečný, tato stejná hodnota je vrácena pomocí SetTimer.Jinak SetTimer určuje novou jedinečnou hodnotu a vrátí ji.Pro okno časovače (které má funkci zpětného volání NULL) musí hodnota být jedinečná pouze v případě jiných časovačů oken, které jsou přidruženy k aktuálnímu oknu.Pro zpětné volání časovače hodnota musí být jedinečná pro všechny časovače ve všech procesech.Při vytváření časovače zpětného volání je tedy pravděpodobnější, že vrácená hodnota se může lišit od zadané hodnoty.nElapse
Určuje hodnotu časového limitu nebo interval v milisekundách.lpfnTimer
Určuje adresu funkce zpětného volání TimerProc poskytované aplikací, která zpracovává zprávy WM_TIMER.Pokud je tento parametr NULL, zprávy WM_TIMER jsou umístěny do fronty zpráv aplikace a zpracovány objektem CWnd.
Vrácená hodnota
Identifikátor nového časovače, je-li funkce úspěšná.Tato hodnota může nebo nemusí být rovna hodnotě předané prostřednictvím parametru nIDEvent.Aplikace by měly vždy předat vrácenou hodnotu do členské funkce KillTimer pro zrušení časovače.Jiné než nula v případě úspěchu, jinak 0.
Poznámky
Hodnota intervalu je zadána a pokaždé, když interval uplyne, systém odešle zprávu WM_TIMER do fronty zpráv instalace instalační aplikace nebo zprávu předá funkci zpětného volání definované aplikací TimerProc.
Funkce zpětného volání lpfnTimer nemusí mít název TimerProc, ale musí být udána jako statická a definovaná takto.
void CALLBACK TimerProc(
HWND hWnd, // handle of CWnd that called SetTimer
UINT nMsg, // WM_TIMER
UINT_PTR nIDEvent, // timer identification
DWORD dwTime // system time
);
Příklad
Tento příklad používá CWnd::SetTimer, CWnd::OnTimer a CWnd::KillTimer ke zpracování zpráv WM_TIMER.První časovač je nastaven pro odesílání zprávy WM_TIMER do okna hlavního rámce každé 2 sekundy v OnStartTimer.Obslužná rutina události OnTimer zpracovává zprávy WM_TIMER pro hlavní okno s rámcem.Tato metoda způsobí, že reproduktor počítače každé 2 sekundy pípne.Druhý časovač odešle zprávu funkci zpětného volání každé 3,75 sekundy.OnStopTimer ukončí oba časovače voláním CWnd::KillTimer pro každé ID časovače.
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);
}
Požadavky
Hlavička: afxwin.h