MFC 프로그래밍을 활용한 시간/날짜 프로그램
- 최초 작성일: 2022년 2월 7일 (월)
목차
[TOC]
실습
프로젝트 생성
다이얼로그 편집/디자인
코드 작성
‘MClock.Dlg.h’ 헤더 파일에 변수 선언을 위해 [Solution Explorer]-[MClock]-[Header Files]에서 ‘MClockDlg.h’ 을 더블클릭하고 다음과 같이 코드를 추가한다.
// CMClockDlg dialog
class CMClockDlg : public CDialogEx
{
// Construction
public:
CMClockDlg(CWnd* pParent = nullptr); // standard constructor
CRect screen; // 화면 크기 저장 변수
int vsize, hsize; // 폭과 높이 변수
UINT htimer; // 타이머를 위한 변수
// Dialog Data
다음으로 OnInitDialog() 함수의 변수를 초기화 시켜준다.
[Class View]-[MClock]-[CMClockDlg]-[OnInitDialog()]를 더블클릭한 후 다음과 같이 코드를 추가한다.
이제는 날짜와 시간을 출력하기 위해 ‘WM_TIMER’ 메시지를 추가한다.
[Ctrl + Shift + X] 키 혹은 [Menu]-[Project]-[Class Wizard] 를 클릭해서 클래스 마법사를 실행시켜 다음과 같이 WM_TIMER 메시지를 더블클릭해 ‘OnTimer’ 함수를 추가하고, OnTimer()에 코드를 추가한다.
void CMClockDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CTime gct = CTime::GetCurrentTime();
CString strDate;
CString strTime;
strDate.Format(_T("%d 년 %d 월 %d 일 "), gct.GetYear(), gct.GetMonth(), gct.GetDay());
GetDlgItem(IDC_STATIC_DATE)->SetWindowText((LPCTSTR)strDate);
strTime.Format(_T("%d 시 %d 분 %d 초 "), gct.GetHour(), gct.GetMinute(), gct.GetSecond());
GetDlgItem(IDC_STATIC_TIME)->SetWindowText((LPCTSTR)strTime);
Invalidate();
CDialogEx::OnTimer(nIDEvent);
}
실행 결과 1
위의 실행된 결과는 윈도우가 고정되어 있으나, 마우스 이동 시 움직이는 마우스를 피해서 창이 이동하기 위한 ‘WM_SETCURSOR’ 메시지를 추가한다.
[Ctrl+Shift+X] 키 혹은 [Menu]-[Project]-[Class Wizard] 를 클릭해서 클래스 마법사를 실행시켜 다음과 같이 WM_SETCURSOR 메시지를 더블클릭해 ‘OnSetCurosor’ 함수를 추가하고, OnSetCursor()에 코드를 추가한다.
BOOL CMClockDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
// TODO: Add your message handler code here and/or call default
RECT winpos;
int x = rand() % (screen.right - vsize); // rand() : 0~32767 사이의 임의의 숫자 발생
int y = rand() % (screen.bottom - hsize); // 화면내 이동
winpos.top = y;
winpos.bottom = y + hsize;
winpos.left = x;
winpos.right = x + vsize;
MoveWindow(&winpos, TRUE); // 윈도우 이동
return CDialogEx::OnSetCursor(pWnd, nHitTest, message);
}
실행 결과 2
마지막으로, 프로그램 종료 시 타이머를 삭제하기 위해 ‘WM_CLOSE’ 메시지를 추가한다.
[Ctrl+Shift+X] 키 혹은 [Menu]-[Project]-[Class Wizard] 를 클릭해서 클래스 마법사를 실행시켜 다음과 같이 WM_CLOSE 메시지를 더블클릭해 ‘OnClose’ 함수를 추가하고, OnClose()에 코드를 추가한다.
void CMClockDlg::OnClose()
{
// TODO: Add your message handler code here and/or call default
KillTimer(htimer);
CDialogEx::OnClose();
}