티스토리 뷰

개발/VC++ (MFC)

MFC : 타이틀바에 시간 정보 출력하기

부캐: 개발하는 조대리 2023. 6. 23. 18:46
반응형

프로그램 타이틀바에 시간 정보 출력하기

 

프로그램 타이틀바에 시간 정보를 출력하기 위해서는 3가지를 알아야 한다.

1. 타이틀바 이름 변경하기
2. 현재시간 구하기
3. 타이머 이벤트에 연결하기

 

1. 타이틀바 이름 변경하기

프로그램 타이틀바 이름을 변경하기 위해서는 다음과 같이 작성하면 된다.

m_pMainWnd->SetWindowText("타이틀바 제목")

 

근데 어디에 위 코드를 추가해주어야 할까?

m_pMainWnd는  CWinThread 클래스의 멤버 변수다.

CWinThread 클래스는 뭐지? 하시겠지만 MFC 마법사(Wizard)를 끝 마치면 프로젝트이름App 클래스가 생성되고 이놈이 CWinApp 클래스를 상속받고,  CWinApp은 다시 CWinThread를 상속받고 있다.

즉, 프로젝트이름App -> CWinApp -> CWinThread 이런 그림이다.

 

CWinThread 상속
TestApp 클래스 상속

그래서 m_pMainWnd 멤버변수 관련된 작업은 마법사(Wizard)를 통해 만든 프로젝트이름App 클래스에서 해주면 된다.

 

2. 현재시간 구하기

CTime currentTime
currentTime = CTime::GetCurrentTime()
CString time = currentTime.Format("%H:%M:%S")

 

3. 타이머 이벤트 연결하기

위 1, 2번을 조합하고 추가 필요한 것은 매초 이벤트를 발생시킬 수 있는 타이머 이벤트가 필요한다.

// 1초 주기로 타이머 생성
_timerId = SetTimer(1, 1000, NULL);

// 매초마다 타이틀바에 시간정보 출력
void TestDlg::OnTimer(UINT_PTR nIDEvent)
{
  ...
}

 

정리하면 타이머 이벤트가 매초마다 발생될 때  m_pMainWnd->SetWindowText("타이틀바 제목") 함수를 호출하면 된다. 프로젝트이름App 클래스는 AfxGetApp() 함수로 접근가능하기 때문에 취향에 따라서 멤버 함수를 만들어서 m_pMainWnd에 접근하던지 아니면 m_pMainWnd에 바로 접근해서 SetWindowText() 함수를 호출하면 된다.

 

// 1초 주기로 타이머 생성
_timerId = SetTimer(1, 1000, NULL);

// 매초마다 타이틀바에 시간정보 출력
void TestDlg::OnTimer(UINT_PTR nIDEvent)
{
  CTime currentTime
  currentTime = CTime::GetCurrentTime()
  CString time = currentTime.Format("%H:%M:%S")
  ((XXX*)AfxGetApp())->m_pMainWnd->SetWindowTextW(time);
}

 


개인적으로 학습하면서 정리한 내용입니다.

잘못된 내용이 있을 경우 알려주시면 확인 후 수정 및 반영하도록 하겠습니다.

 

오늘도 감사합니다.(__)>