OFFICE/프로그램

MFC 타이머, timer 에 관해서

gandus 2011. 6. 30. 10:42

타이머를 설정하기 위해선
 

UINT_PTR SetTimer(m_hWnd, nIDEvent, nElapse,  lpfnTimer);

 

1번 인자는 윈도우 핸들입니다. 왜 핸들이 들어가느냐.. 위서 설명했듯 메시지큐가 필요하기 때문입니다. 
 

2번 인자는 이벤트 ID 입니다. 쉽게 말해 타이머를 여러개 돌릴 수 있으므로 이것을 구분하기 위한 넘버 

값이라고 보면 됩니다. 이것은 0 을 제외한 값을 넣어주면 됩니다. 이유는 아래에..

 

3번 인자는 ms 단위의 시간 간격값입니다. 1초는 1000ms..

 

4번 인자는 타이머 이벤트 발생 시 콜백 핸들러입니다.

 

void Func(HWND, UINT, UINT_PTR, DWORD) 형태의 함수 포인터를 지정해줄 수 있습니다.

 

이것은 NULL 로 지정할 경우 따로 프로시져에서 WM_TIMER 발생 시 핸들러 처리를 해도 상관없습니다.

 

 

리턴값은 nIDEvent 에 지정한 값으로 나옵니다. 이때 이미 지정한 ID로 생성한 타이머가 있을 경우 혹은

 

기타 다른 이유로 타이머 등록이 실패하면 리턴값은 0 이 됩니다. 에러 여부는 0 이냐 아니냐로 판단되

 

므로 nIDEvent 에 0 을 지정할 수 없습니다.

 

 

MFC 의 경우 CWnd 의 메써드로 등록된 SetTimer 를 호출하면 됩니다.

 

UINT_PTR CWnd::SetTimer(UINT_PTR nIDEvent, UINT nElapse, (*handler));

 

형태입니다. CWnd 자체가 윈도우를 생성 및 관리하기 위한 래핑 클래스이므로 따로 윈도우 핸들이 필

 

요하지 않습니다. 또 핸들러를 지정해주지 않을 경우 기본 핸들러는 CWnd::OnTimer 로 지정된다는

 

것 정도 알아주시면 되겠습니다.

 

 

타이머를 죽일 때는

 

BOOL CWnd::KillTimer(UINT_PTR nIDEvent);

 

를 사용하세요.