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);
}
}