пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

Обробка повідомлень таймера. Приклади реалізації

Роботі таймера відповідає повідомлення 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));         // копіювання рядка із часом у вікно

]


21.06.2015; 22:26
хиты: 87
рейтинг:0
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь