타이머

MFC 2018.12.13 18:33

타이머는 특정한 시간마다 한 번씩 반복 작업을 수행하여야 할 때 용이하다





아 사진크기가.....


어쨌든 대화상자에 위 처럼 컨트롤을 추가시킨다.









클래스 마법사 (컨트롤 + 쉬프트 + X) 를 실행하여  CTimerDlg 클래스 안에  WM_TIMER 메세지를 추가한다








switch (nIDEvent) { //  타이머의 번호

case 0:

m_edit_A += 1;

if (m_edit_A == 10)

m_edit_A = 0;

break;

case 1:

m_edit_B += 1;

if (m_edit_B == 10)

m_edit_B = 0;

break;

}

UpdateData(FALSE);


타이머에 대한 이벤트가 발생하면 프로젝트 안에 있는 OnTimer() 함수를 호출 하게 되므로

어떤 타이머가 현재 OnTimer() 함수를 호출 하였는지 알려주기 위해 인수가 필요하다.






타이머 번호를 만들었으니 이름도 추가해주자


리소스뷰 - String Table 로 가서 클릭하여 직접 작성해준다. 


캡션까지 꽉꽉 채워 적어야 다음 변수를 만들 수 있으니 주의








변수 추가하기


헤더 파일에 준비버튼이 클릭된 것인지 알기 위해 BOOL 타입의 변수를 추가한다.


아래에 적힌 함수들은  아까 대화상자에서 만들었던 버튼들을 더블클릭 하면 자동으로 생성된다!


버튼의 갯수가 총 5개 였으니 함수도 5개. 클릭해서 만들어주자












void CTimerDlg::OnBnClickedButtStart()

{

// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.

m_edit_A = 0;

m_edit_B = 0;

m_readyA = FALSE;

m_readyB = FALSE;

UpdateData(FALSE);

}




void CTimerDlg::OnBnClickedButtReadyA()

{

// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.

SetTimer(ID_TIMER_A, 50, NULL);

//SetTimer(0. 50. NULL) 로 적어도 무방하다

//case 0 일때의 분기문을 실행함

}



void CTimerDlg::OnBnClickedButtSetA()

{

// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.

KillTimer(ID_TIMER_A); //KillTimer(0);라고 적어도 된다. 

m_readyA = TRUE; 

if ((m_readyA == TRUE) && (m_readyB == TRUE))

{

if (m_edit_A > m_edit_B) {

AfxMessageBox(_T("A님이 이기셨습니다.")); //메시지 창 띄우는 함수)

}

else if (m_edit_A < m_edit_B) {

AfxMessageBox(_T("B님이 이기셨습니다."));

}

else if (m_edit_A == m_edit_B) {

AfxMessageBox(_T("비기셨습니다."));

}

}

}




void CTimerDlg::OnBnClickedButtReadyB()

{

// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.

SetTimer(ID_TIMER_B, 50, NULL);

//SetTimer(1. 50. NULL) 로 적어도 무방하다

//case 0 일때의 분기문을 실행함

}




void CTimerDlg::OnBnClickedButtSetB()

{

// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.

KillTimer(ID_TIMER_B); //KillTimer(1);라고 적어도 된다. 

m_readyB = TRUE;

if ((m_readyA == TRUE) && (m_readyB == TRUE))

{

if (m_edit_A > m_edit_B) {

AfxMessageBox(_T("A님이 이기셨습니다.")); //메시지 창 띄우는 함수)

}

else if (m_edit_A < m_edit_B) {

AfxMessageBox(_T("B님이 이기셨습니다."));

}

else if (m_edit_A == m_edit_B) {

AfxMessageBox(_T("비기셨습니다."));

}

}

}




UINT SetTimer(UINT nIDEvent, UINT nElapse, void(CALLBACK EXPORT* IpfnTimer(HWND, UINT, UINT, DWORD))


nIDEvent : 타이머의 아이디를 지정한다

nElapse : 몇 초마다 WM_TIMER 메시지를 호출 할 것인지 지정한다 단위는 ms  (1000 = 1초)


void(CALLBACK EXPORT* IpfnTimer(HWND, UINT, UINT, DWORD) : 콜 백 함수를 지정한다.


 F5로 실행을 했는데 오류가 발생한다면 저장버튼(디스크 모양) 옆에있는 


모두 저장 버튼(디스크 여러개)을 누른 뒤 실행해 보시기 바랍니다.



결과 사진은 없음





끝$$

'MFC' 카테고리의 다른 글

타이머  (0) 2018.12.13
MFC 메뉴 만들기4 모달리스 대화상자  (0) 2018.12.13
MFC 메뉴 만들기3 모달 대화상자  (0) 2018.12.13
MFC 메뉴 만들기2 팝업메뉴  (0) 2018.12.13
MFC 메뉴 만들기  (0) 2018.12.13
그리기연습문제 2번  (0) 2018.10.11
Posted by 대엽


티스토리 툴바