當我們需要一個固定週期做一些事的時候,Timer便是一個很好用的方法。

 

其生命週期涉及下列方法:

  ON_WM_TIMER()
  void SetTimer(UINT_PTR nIDEvent, UINT uElapse, void (__stdcall *lpfnTimer(HWND, UINT, UINT_PTR, DWORD)));
  void KillTimer(UINT_PTR nIDEvent);
  void OnTimer(UINT nIDEvent);

 

首先在.h檔中定義我們要使用的Event及OnTimer

// TestTimerDlg.h

#define ID_CASE1 0
#define ID_CASE2 1

class CTestTimerDlg : public CDialog
{
// Construction
public:
	
	afx_msg void OnTimer(UINT nIDEVENT);  

   //中間系統自動產生程式碼省略
}

 

 

然後.cpp檔中的「BEGIN_MESSAGE_MAP(CTestTimerDlg, CDialog)」函式中加入ON_WM_TIMER()。

// TestTimerDlg.cpp

BEGIN_MESSAGE_MAP(CTestTimerDlg, CDialog)

	ON_WM_TIMER()

END_MESSAGE_MAP()

 

 

在程式進入點「OnInitDialog()」函式中加入SetTimer(),也可以看是要在哪時觸發,在此我們是放在Button中。

// TestTimerDlg.cpp

void CTestTimerDlg::OnOK() 
{
	// TODO: Add extra validation here

	SetTimer(ID_CASE1,2000,NULL);
	SetTimer(ID_CASE2,5000,NULL);
	
}

 

 

再來實做OnTimer方法,定義Timer事件的對應處理方法。

// TestTimerDlg.cpp

void CTestTimerDlg::OnTimer(UINT nIDEvent)
{	
	switch (nIDEvent)
	{
	case 0:
		KillTimer(ID_CASE1);
		AfxMessageBox("Timer 1");
		break;
	case 1:
		KillTimer(ID_CASE2);
		AfxMessageBox("Timer 2");
		break;
	}
}

 

 

 

參考資料:zanos的ChinaUnix博客

arrow
arrow
    全站熱搜

    fiend1120 發表在 痞客邦 留言(0) 人氣()