티스토리 뷰
OnTimer는 WM_TIMER 이벤트가 발생할 경우 일반적으로 콜백되는 함수..
WM_TIME을 설정하는 방법은 리소스에서 다이얼로그의 속성 창에 보면
아래와 같이 메세지를 볼 수 있는 버튼을 클릭하면 여러 가지 윈도우 메세지(WM)을 볼 수 있다
그 중 WM_TIMER 를 보면 이미 OnTimer라는 함수가 설정 되어있다.
설정 안되어있다면 OnTimer가 없는 그 빈칸을 클릭하면 <Add> 라고 셀렉트박스가 뜬다..
그럼 이벤트 함수는 생성했는데 어떻게 써먹어야하나...
SetTimer로 타이머를 설정하고, KillTimer로 타이머를 삭제하는 방식으로 하면 된다.
SetTimer는 msdn을 참고하면
CWnd::SetTimer
Installs a system timer.
UINT_PTR SetTimer( UINT_PTR nIDEvent, UINT nElapse, void (CALLBACK* lpfnTimer )(HWND, UINT, UINT_PTR, DWORD ) );
어떻게 써먹느냐를 보기 전에 KillTimer를 살펴보면
CWnd::KillTimer
Kills the timer event identified by nIDEvent from the earlier call to SetTimer.
BOOL KillTimer( UINT_PTR nIDEvent );
간단하다. 요약에 있는 그대로 SetTimer를 통해 설정한 nIDEvent를 인자로 받아서 타이머를 끄는 역할이다. 그럼 대충 활용하는 방법은...
먼저 타이머 만드는 소스가
SetTimer(아이디, 호출 시간(ms) , 콜백 함수);
인데 콜백함수는 NULL , 0 을 넘기게 되면 WM_TIMER에서 설정한 함수를 호출하게 된다.
즉, WM_TIMER가 아니라 다른 함수에 대해서도 호출을 하고 싶다면 3번째 인자를 바꾸면 되고, 그것이 아닌 일반적인 상황에서는 NULL을 넘기면 된다.
첫 번째 인자 아이디에는 아무 int를 넣어도 된다. 하지만 KillTimer에서 호출하는 것과 콜백함수에서 두번째인자가 UINT_PTR 로 여기서 설정한 아이디를 넘겨주므로 타이머가 여러 개 일 경우에는 구분 짓는 것이 좋다.
그냥 일반적으로는
#define MY_TIMER 100
등 과 같이 타이머 아이디를 define문으로 선언한다.
따라서 OnInitDialog나 타이머를 시작할 코드에다가
SetTimer(MY_TIMER , 1000 , 0);
이라고 하면 그때부터 OnTimer 함수가 1초에 한번씩 호출 된다.
타이머는 1초마다 호출 되는 것이므로 타이머를 멈추하려면
KillTimer(MY_TIMER);
라고 하면 간단하다.
그럼 OnTimer안에서는 어떻게 처리 할 것인가..
OnTimer는 인자가 하나로 넘어오는데 바로 UINT_PTR 인 타이머의 아이디이다. 따라서 아이디에 따라 다르게 처리하려면 아래와 같이 하면 편하다.
void CSensorMonitoringDlg::OnTimer(UINT_PTR nIDEvent)
{
switch(nIDEvent)
{
case MY_TIMER:
//1초마다 처리할 내용
break;
case OTHER_TIMER;
//다른 타이머를 설정했다면 이렇게 구분
break;
}
}
흐름만 조금 이해하면 아주 쉽다..
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- lecture
- 자바스크립트
- 안드로이드
- ny-school
- TIP
- Android
- 뽐뿌
- mini project
- 속깊은 자바스크립트 강좌
- 사진
- Writing
- 강좌
- php
- gae
- Python
- HTML5
- gre
- 팁
- 샷
- K100D
- 서울
- c++
- GX-10
- google app engine
- 탐론 17-50
- 안드로이드 앱 개발 기초
- Javascript
- HTML5 튜토리얼
- java
- 삼식이
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함