본문 바로가기

무언가 만들기 위한 지식/Win32/MFC

MFC OnTimer를 이용한 간단한 시계

DialogView등 하나의 Class에는 OnTimer Message를 추가할 수 있다.
(좌측 Class View에서 가능하다.)

일단 원리는  OnTimer가 주기적으로 작동하기 위해 SetTimer로 간격을 설정해준다.
그 후 OnTimer가 실행될 필요가 없을때는  KillTimer로 등록된 Timer Message를 삭제한다.
void CToday::OnTimer(UINT_PTR nIDEvent)
{
	CTime timer;
	timer=CTime::GetCurrentTime();
	CString strTimer;
	strTimer=timer.Format("%H시 %M분 %S초");
	todayTime.SetWindowTextA(strTimer);
    //계속 실행될 OnTimer 함수. 시계는 계속 갱신시켜준다. todayTime은 Edit Control 로 된 textbox이다.
    //SetTimer상에서 갱신되는 Time을 지정한다.
	CDialog::OnTimer(nIDEvent);
}

OnTimer를 작성하였으니 초기화되는 부분을 설정하여야 한다.
초기화부분은 랜덤을 위한 srand와 SetTimer를 설정한다.

BOOL CToday::OnInitDialog()
{
	srand((unsigned int) time(0));
	CDialog::OnInitDialog();
	CTime timer;
	timer=CTime::GetCurrentTime();
	CString strTimer;
	strTimer=timer.Format("%H시 %M분 %S초");
	todayTime.SetWindowTextA(strTimer);
	SetTimer(0,1000,NULL);
	return TRUE; 
}
SetTimer에서 두번째 인자는 밀리세컨드부분이다. 1000이면 1초를 말한다.
즉 1초마다 갱신되며 OnTimer가 실행되게 된다.

void CToday::OnOK()
{
	KillTimer(0);
	CDialog::OnOK();
}

void CToday::OnCancel()
{
	KillTimer(0);
	CDialog::OnCancel();
}

종료시점에는 KillTimer를 통해 OnTimer가 계속 호출되지 않도록 하여야 한다. Dialog를 사용하였다면 OK나 Cancel버튼에서 KillTimer를 호출하자.

작성하면 1초마다 시간이 갱신되며 화면에 뿌려지는 모습을 볼 수 있다.
이를 응용하면 다양한 시계작성이 가능할 것이다.