[CHAPTER 03] Visual C++ 2022 MFC 윈도우 프로그래밍 - 연습문제

2023. 5. 15. 00:56기타(이론)/C++ MFC 윈도우 프로그래밍

1. 마우스와 키보드를 이용하여 스톱워치 기능을 하는 프로그램 작성하라.

BOOL CreateFont(
    int nHeight,
    int nWidth,
    int nEscapement,
    int nOrientation,
    int nWeight,
    BYTE bItalic,
    BYTE bUnderline,
    BYTE cStrikeOut,
    BYTE nCharSet,
    BYTE nOutPrecision,
    BYTE nClipPrecision,
    BYTE nQuality,
    BYTE nPitchAndFamily,
    LPCTSTR lpszFacename);

https://kwonkyo.tistory.com/94#gsc.tab=0

 

[C++/MFC] CString 다양한 기능들 정리

CString은 MFC에서 문자열을 처리를 아주 쉽게 처리할 수 있도록 제공해주는 클래스라서 내장된 기능이 어마어마 합니다. 사용법만 알면 간단히 사용할 수 있도록 만들어 두었는데 그 내부를 보면

kwonkyo.tistory.com

https://codingcoding.tistory.com/494

 

[MFC강좌] CreateFont(), CFont 사용 방법 (static 폰트 변경 방법 예제)

[MFC강좌] CreateFont(), CFont 사용 방법 (static 폰트 변경 방법 예제) 이번 MFC강좌에선 CFont의 CreateFont() 사용 방법을 알아보겠습니다. CreateFont를 사용하기 위해선 하나의 객체를 생성한 뒤, 폰트(CFont)를

codingcoding.tistory.com

https://blog.naver.com/0k00k0/222167075484

 

[ MFC 프로그램 ] Stop Watch 만들기

프로그램 설명 처음 프로그램 실행 시에는 작동 정지 상태이다. 왼쪽 마우스를 클릭하면 시작한다. 작동 중...

blog.naver.com

해냈뜨아!!!!!!!!!!!!

// CExercise31View 메시지 처리기


void CExercise31View::OnTimer(UINT_PTR nIDEvent)
{
	// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
	m_nMSec++;
	if (m_nMSec == 60) {
		m_nMSec = 0;
		m_nSecond++;
	}
	if (m_nSecond == 60) {
		m_nSecond = 0;
		m_nMinute++;
	}
	m_strStopWatch.Format(_T("%02d: %02d. %02d"), m_nMinute, m_nSecond, m_nMSec);

	Invalidate();
	CView::OnTimer(nIDEvent);
}


void CExercise31View::OnLButtonDown(UINT nFlags, CPoint point)
{
	// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
	if (m_bStopWatchRun == false)
	{
		m_bStopWatchRun = true;
		SetTimer(0, 10, NULL);
	}
	else if (m_bStopWatchRun == true)
	{
		KillTimer(0);
		m_bStopWatchRun = false;
	}
	CView::OnLButtonDown(nFlags, point);
}


void CExercise31View::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
	// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
	if (m_bStopWatchRun && nChar == VK_SPACE) {
		CString strRecord;
		strRecord.Format(L"%2d. ", m_nCount + 1);
		m_strRecord[m_nCount++] = strRecord + m_strStopWatch;

		if (m_nCount == 30) m_nCount = 0;
	}

	Invalidate();

	CView::OnKeyDown(nChar, nRepCnt, nFlags);
}


void CExercise31View::OnRButtonDown(UINT nFlags, CPoint point)
{
	// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
	if (m_bStopWatchRun == false)
	{
		if (AfxMessageBox(_T("스톱워치를 초기화하시겠습니까?"),
			MB_YESNO | MB_ICONQUESTION) == IDYES)
		{
			//모든 변수를 초기화
			for (int i = 0; i < 30; i++) {
				m_strRecord[i].Empty();
			}

			m_nCount = 0;
			m_nMinute = 0;
			m_nSecond = 0;
			m_nMSec = 0;
			m_strStopWatch = _T("00:00.00");

		}
		Invalidate();
	}
	else
	{
		AfxMessageBox(_T("작동 중에는 초기화 할 수 없습니다."),
			IDOK | MB_ICONERROR) == IDYES;
	}


	CView::OnRButtonDown(nFlags, point);
}