Win32 API with 나우캠퍼스
Win32 API 6강. (3) 타이머
코다람쥐
2022. 8. 16. 16:45
1. 타이머
▩ 역할
일정한 시간 간격으로 함수 호출 또는 WM_TIMER 메시지 발생
▩ 사용 용도
일정한 시간 간격으로 코드 실행
▩ 생성
UINT_PTR SetTimer(
[in, optional] HWND hWnd,
[in] UINT_PTR nIDEvent,
[in] UINT uElapse,
[in, optional] TIMERPROC lpTimerFunc
);
hWnd : 윈도우 핸들
nIDEvent : 타이머의 아이디(양의 정수값)
uELAPSE : 일정시간 간격(단위는 ms)
lpTimerFunc : 함수 전달.(함수포인터임), WM_TIMER를 사용하기 위해선 NULL을 입력
▩ 해제
BOOL KillTimer(
[in, optional] HWND hWnd,
[in] UINT_PTR uIDEvent
);
▩ UINT_PTR
unsigned int, unsigned _int64
타이머 이벤트 처리
▩ 메시지 처리
WM_TIMER + wParam(아이디)
사용예시.
static char string[100];
static int timer1 = 0, timer2 = 0;
switch (message)
{
case WM_CREATE:
SetTimer(hWnd, 1, 1000, NULL); // 타이머1 생성
SetTimer(hWnd, 2, 5000, NULL); // 타이머2 생성
break;
case WM_TIMER:
switch (wParam)
{
case 1:
timer1++;
InvalidateRect(hWnd, NULL, TRUE);
break;
case 2:
timer2 += 5;
InvalidateRect(hWnd, NULL, TRUE);
break;
}
break;
case WM_PAINT:
{
hdc = BeginPaint(hWnd, &ps);
sprintf_s(string, "타이머1 : %d, 타이머2 : %d", timer1, timer2);
TextOut(hdc, 0, 0, string, strlen(string));
EndPaint(hWnd, &ps);
}
break;
case WM_DESTROY:
KillTimer(hWnd, 1); // 타이머1 해제
KillTimer(hWnd, 2); // 타이머2 해제
PostQuitMessage(0);
break;
}
▩ 콜백 함수 처리
void CALLBACK TimerProc(
HWND hwnd,
UINT uMsg,
UINT idEvent,
DWORD dwTime );
hwnd : 윈도우 핸들
uMsg : 타이머 메시지
idEvent : 타이머 아이디
dwTime : 일정시간 간격(단위는 ms)