- 타이머를 시작하는 부분입니다.
- m_TimerID는 UINT형 입니다.
~cpp
void CALLBACK TimerProc(UINT uiID,UINT uiMsg,DWORD dwUser,DWORD dw1,DWORD dw2)
{
CAlcaDlg *pDlg=(CAlcaDlg*)AfxGetMainWnd();
pDlg->SendMessage(WM_MYMSG,0,0);
}
~cpp
CAlcaDlg *pDlg = (CAlcaDlg*)AfxGetMainWnd();
// 메인 윈도우의 포인터를 얻어와서
timeKillEvent(pDlg->m_TimerID);
// 타이머 종료
- CALLBACK 함수는 클래스 내에서 선언 될 경우에는 static으로 선언 되어야합니다.
~cpp
m_nTimerID = timeSetEvent(5, 0, (LPTIMECALLBACK)timeproc, (DWORD)this, TIME_PERIODIC);
- m_nTimerID는 UINT형 입니다. 성공할 경우에는 타이머의 번호가 넘어옵니다.
- 5는 타이머가 호출될 간격입니다. 역시 단위는 ms(1/1000초)입니다.
- this는 이 클래스 인스턴스의 값을 넘겨줍니다. 클래스 내부 함수로 선언했을 경우네는 중요한 인자값입니다.
~cpp
void CALLBACK CMyDlg::timeproc(UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2){
CMyDlg *pDlg = (CMyDlg *)dwUser;
pDlg->......
dwUser는 timeSetEvent의 this값을 인자로 받아 pDlg에 현재 인스턴스의 주소를 넣습니다.
pDlg를 통해서 원래 클래스의 모든 메소드와 변수를 사용할 수 있습니다.
~cpp
timeKillEvnet(m_nTimerID);
setTimerEvent때 얻은 타이머의 번호를 집어넣어 타이머를 죽입니다.