mfc_timer - 8BitsCoding/RobotMentor GitHub Wiki


void CALLBACK MyTimerProc(HWND ah_wnd, UINT a_msg_id, UINT_PTR a_timer_id, DWORD a_system_time)
{
	// ah_wnd : 대화상자의 윈도우 핸들
	// a_msg_id : WM_TIMER가 들어옴
	//a_timer_id : 타이머 아이디
	// a_system_time : 무시(NULL)

	if (a_timer_id == 1) {
		// OnBnClickedGetTimeBtn();
		::SendMessage(ah_wnd, WM_COMMAND, MAKEWPARAM(IDC_GET_TIME_BTN, BN_CLICKED));
	}

} 
void CMFCApplication2Dlg::OnBnClickedStartBtn()
{
	if (m_timer_flat != 0) {
		// SetTimer(1, 200, NULL);
		// (참고) SetTimer(1, 200, &MyTimerProc::MyTimerProc);
		// 와 같은 방식으로 MyTimerProc내부에 MyTimerProc를 넣는 방식도 가능하지만
		// static void CALLBACK MyTimerProc(HWND ah_wnd, UINT a_msg_id, UINT_PTR a_timer_id, DWORD a_system_time)
		// static으로 MyTimerProc를 선언하면서 MyTimerProc내부에서 CMFCApplication2Dlg변수를 사용할 수 없다..
		// 가령 m_timer_flat와 같은 변수 사용불가!
		// 다른 방법으로 써보자.
		SetTimer(1, 200, MyTimerProc);
		m_timer_flat = 1;
	}
}
void CMFCApplication2Dlg::OnTimer(UINT_PTR nIDEvent)
{
	if (nIDEvent == 1) {
		OnBnClickedGetTimeBtn();
	}
	else {
		CDialogEx::OnTimer(nIDEvent);
	}
}
void CMFCApplication2Dlg::OnDestroy()
{
	CDialogEx::OnDestroy();

	if (m_timer_flat == 1) {
		KillTimer(1);
	}
}