WM_TIMER

인수

wParam : 타이머의 ID가 전달된다. 이 ID는 SetTimer의 두번째 인수로 지정한 값이다.

lParam : 콜백 함수가 있을 경우 콜백 함수의 번지가 전달된다.

설명

SetTimer 함수로 타이머를 설치했을 경우 지정한 시간 간격으로 이 메시지가 반복적으로 큐에 붙여진다. 주기적으로 어떤 작업을 반복해야 한다면 타이머를 설치하고 이 메시지에서 작업을 처리하도록 한다. 두 개 이상의 타이머가 설치되어 있을 경우 각각의 타이머는 정해진 시간 간격으로 이 메시지를 큐에 붙이며 WM_TIMER에서는 wParam으로 어떤 타이머에 의해 이 메시지가 발생했는지 조사한다.

타이머 콜백 함수를 지정했을 경우는 이 메시지를 처리할 필요가 없으며 시스템이 콜백 함수를 주기적으로 호출해 준다.

이 메시지는 다른 메시지들에 비해 우선순위가 낮게 설정되어 있기 때문에 먼저 처리해야 할 메시지가 있을 경우 곧바로 윈도우 프로시저로 보내지지 않을 수 있다. 따라서 정확한 시간에 이 메시지가 전달되지 않는 경우도 있으므로 정확도를 요하는 작업에는 이 메시지를 사용하지 않는 것이 좋다.

리턴

이 메시지를 처리했으면 0을 리턴해야 한다.

예제

예제 1

다음 예제는 WM_TIMER를 이용해서 간단한 시계를 만들어 본 것이다.

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	static HANDLE hTimer;
	SYSTEMTIME st;
	static char sTime[128];

	switch(iMessage) {
	case WM_CREATE:
		hTimer=(HANDLE)SetTimer(hWnd,1,1000,NULL);
		SendMessage(hWnd, WM_TIMER, 1, 0);
		return 0;
	case WM_TIMER:
		GetLocalTime(&st);
		wsprintf(sTime,"지금 시간은 %d시 %d분 %d초입니다",
			st.wHour,st.wMinute,st.wSecond);
		InvalidateRect(hWnd,NULL,TRUE);
		return 0;
	case WM_PAINT:
		hdc=BeginPaint(hWnd,&ps);
		TextOut(hdc,10,10,sTime,strlen(sTime));
		EndPaint(hWnd,&ps);
		return 0;
	case WM_DESTROY:
		KillTimer(hWnd,1);
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

메인 윈도우가 생성될 때 1초 간격으로 타이머를 설치했으며 WM_TIMER에서는 1초 간격으로 시간을 갱신한다.

플랫폼

95이상

참조

 


written by http://www.winapi.co.kr