Роботі таймера відповідає повідомлення WM_TIMER. У карті повідомлень йому належить макрокоманда ON_WM_TIMER(), якій у свою чергу відповідає обробник OnTimer().
Для роботи з таймером MFC використовує декілька функцій, серед них функції запуску таймера та його вилучення.
Запуск таймера забезпечується функцією SetTimer():
UINT CWnd::SetTimer( UINT nIDEvent, UINT nElapse,
void (CALLBACK EXPORT* lpfnTimer)(HWND, UINT, UINT, DWORD) );
де nIDEvent – визначає ідентифікатор таймера відмінний від нуля, nElapse – визначає часовий інтервал в мілісекундах між моментами активації таймера; lpfnTimer – визначає покажчик на можливу функцію зворотного виклику, яка обробляє повідомлення WM_TIMER. Якщо цей параметр встановити рівним NULL, повідомлення WM TIMER обробляється об'єктом класу CWnd.
Вилучення таймера проводиться за допомогою функції KillTimer():
BOOL CWnd::KillTimer(UINT ID);
Повідомлення таймера обробляються функцією OnTimer(UINT ID). В усіх випадках ID є ідентифікатором таймера (у простішій інтерпретації – його номер).
// файл st1.h
class CApp : public CWinApp
[public: BOOL InitInstance();];
class CMainWin : public CFrameWnd
[public: void OnTimer(UINT);
CMainWin();
DECLARE_MESSAGE_MAP()];
// файл st1.cpp
#include <afxwin.h>
#include "st1.h"
CMainWin::CMainWin()
[Create(NULL,NULL); // cтворення вікна з пустим заголовком
SetTimer(1,500,NULL); // запуск таймера з інтервалом 500 мілісекунд
]
BOOL CApp::InitInstance()
[m_pMainWnd = new CMainWin;
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE; ]
CApp App;
BEGIN_MESSAGE_MAP(CMainWin,CFrameWnd)
ON_WM_TIMER() // макрокоманда обробки таймера
END_MESSAGE_MAP()
void CMainWin::OnTimer(UINT i)
[char s[250];
CTime curtime = CTime::GetCurrentTime();
struct tm *newtime;
newtime=curtime.GetLocalTm();
wsprintf(s,asctime(newtime));
s[strlen(s)-1]='\0';
SetWindowText(s); // копіювання рядка зі значенням часу у заголовок вікна
CClientDC dc(this);
dc.TextOut(10,10,s,strlen(s)); // копіювання рядка із часом у вікно
]