[MFC] 메시지 박스 프로그램 작성 -3

  • 최초 작성일: 2022년 2월 23일 (수)

목차

[TOC]

목적

조건 1. 프로젝트 이름은 ‘MessageBoxes’로 한다.

조건 2. 버튼을 클릭하면 메시지 박스와 에디트 컨트롤에 설명을 표시한다.


결과 1. 초기화면은 다음과 같다.

image


결과 2. [MFC란?] 버튼을 클릭했을 때 결과는 다음과 같다.

image


결과 3. 6가지의 버튼을 클릭했을 때 표시되는 메시지 박스는 다음과 같다.

image


구현

프로젝트 생성

아래와 같이 MFC Application을 생성해준다. 프로젝트명은 MessageBoxes로 했다.

image


그리고, Application type (응용 프로그램 종류)는 ‘Dialog based (대화 상자 기반)’를 선택하고 [Finish] 버튼을 클릭한다.

image


다이얼로그 생성 및 설정

그러면 아래와 같은 창이 나오는데, 안 나온다면 [Ctrl]-[Shift]-[R] 혹은 [메뉴]-[보기]-[다른 창]-[리소스 뷰]를 클릭하면 된다.

image


그러면, 가운데 Dialog에 있는 모든 컨트롤들을 삭제해준다. ( [Ctrl + A] + [Delete] )

image


컨트롤과 속성값은 아래와 같이 설정한다.

image image


멤버 변수 추가

버튼을 누를 때마다 Edit Control에 출력하기 위해 멤버 변수를 추가해주어야 한다.

멤버 함수를 추가하기 위해서 [메뉴]-[프로젝트]-[클래스 마법사] 또는, [Ctrl + Shift + X] 키를 눌러 [클래스 마법사]를 실행시킨다.

그럼, 아래의 창이 뜨는데 거기서 [Member Variables(멤버 변수)] 탭에서 ‘IDC_EDIT_RESULT’를 클릭한 후 ‘Add Variable(변수 추가)’ 버튼을 클릭한다.

Control Variable(제어 변수) 창에서 다음과 같이 설정하고 Finish 버튼을 클릭한다. 그 다음, 멤버 변수 ‘m_strResult’가 추가된 것을 확인하고 확인 버튼을 누른다.

image

image


또한 [클래스 뷰]-[MessageBoxes]-[CMessageBoxesDlg] 에서도 ‘m_strResult’가 추가된 것을 확인할 수 있다.

image


멤버 함수 추가

이제, 버튼을 눌렀을 때 함수를 실행하기 위해 멤버 함수를 추가해주어야 한다.

클래스 마법사를 키고 IDC_BUTTON_YN [명령], BN_CLICKED [메시지] 를 클릭하고 [처리기 추가] 를 눌러 멤버 함수들을 아래와 같이 추가한다.

image


그 다음, 아래와 같이 코드를 삽입해주고, 프로그램을 빌드한 후 실행한다.

void CMessageBoxesDlg::OnClickedButtonYnc()
{
	// TODO: Add your control notification handler code here
	int iResults;
	m_strResult = _T("YES/NO/CANCEL 버튼을 눌렀습니다.");
	UpdateData(FALSE);
	iResults = AfxMessageBox(_T("YES/NO/CANCEL 버튼을 눌렀습니다."), (MB_YESNOCANCEL | MB_ICONINFORMATION));

	if (iResults == IDYES)
	{
		m_strResult = _T("OK 버튼을 눌렀습니다!");
		UpdateData(FALSE);
	}
	if (iResults == IDNO)
	{
		m_strResult = _T("NO 버튼을 눌렀습니다1");
		UpdateData(FALSE);
	}
	if (iResults == IDCANCEL)
	{
		m_strResult = _T("CANCEL 버튼을 눌렀습니다!");
		UpdateData(FALSE);
	}
}


void CMessageBoxesDlg::OnClickedButtonYn()
{
	// TODO: Add your control notification handler code here
	int iResults;
	m_strResult = _T("YES/NO 버튼을 눌렀습니다.");
	UpdateData(FALSE);
	iResults = AfxMessageBox(_T("YES/NO 버튼을 눌렀습니다."), (MB_YESNO | MB_ICONWARNING));

	if (iResults == IDYES)
	{
		m_strResult = _T("YES 버튼을 눌렀습니다!");
		UpdateData(FALSE);
	}
	if (iResults == IDNO)
	{
		m_strResult = _T("NO 버튼을 눌렀습니다!");
		UpdateData(FALSE);
	}
}


void CMessageBoxesDlg::OnClickedButtonRc()
{
	// TODO: Add your control notification handler code here
	int iResults;
	m_strResult = _T("RETRY/CANCEL 버튼을 눌렀습니다.");
	UpdateData(FALSE);
	iResults = AfxMessageBox(_T("RETRY/CANCEL 버튼을 눌렀습니다."), (MB_RETRYCANCEL | MB_ICONQUESTION));

	if (iResults == IDRETRY)
	{
		m_strResult = _T("RETRY 버튼을 눌렀습니다!");
		UpdateData(FALSE);
	}
	if (iResults == IDCANCEL)
	{
		m_strResult = _T("CANCEL 버튼을 눌렀습니다!");
		UpdateData(FALSE);
	}
}


void CMessageBoxesDlg::OnClickedButtonOk()
{
	// TODO: Add your control notification handler code here
	int iResults{};
	m_strResult = _T("OK 버튼을 눌렀습니다!");
	UpdateData(FALSE);

	AfxMessageBox(_T("OK 버튼을 눌렀습니다."), MB_ICONERROR);
}


void CMessageBoxesDlg::OnClickedButtonOc()
{
	// TODO: Add your control notification handler code here
	int iResults;
	m_strResult = _T("OK/CANCEL 버튼을 눌렀습니다.");
	UpdateData(FALSE);
	iResults = AfxMessageBox(_T("OK/CANCEL 버튼을 눌렀습니다."), (MB_OKCANCEL | MB_ICONSTOP));

	if (iResults == IDOK)
	{
		m_strResult = _T("OK 버튼을 눌렀습니다!");
		UpdateData(FALSE);
	}
	if (iResults == IDCANCEL)
	{
		m_strResult = _T("CANCEL 버튼을 눌렀습니다!");
		UpdateData(FALSE);
	}
}


void CMessageBoxesDlg::OnClickedButtonMfc()
{
	// TODO: Add your control notification handler code here
	m_strResult = _T("MFC 버튼을 눌렀습니다!");
	UpdateData(FALSE);

	MessageBox(_T("Microsoft Foundation Class 입니다."));
}


void CMessageBoxesDlg::OnClickedButtonExit()
{
	// TODO: Add your control notification handler code here
	OnOK();
}


void CMessageBoxesDlg::OnClickedButtonAri()
{
	// TODO: Add your control notification handler code here
	int iResults;
	m_strResult = _T("ABORT/RETRY/IGNORE 버튼을 눌렀습니다!");
	UpdateData(FALSE);
	iResults = AfxMessageBox(_T("ABORT/RETRY/IGNORE 버튼을 눌렀습니다."), (MB_ABORTRETRYIGNORE | MB_ICONINFORMATION));
	
	if (iResults == IDABORT)
	{
		m_strResult = _T("ABORT 버튼을 눌렀습니다!");
		UpdateData(FALSE);
	}
	if (iResults == IDRETRY)
	{
		m_strResult = _T("RETRY 버튼을 눌렀습니다!");
		UpdateData(FALSE);
	}
	if (iResults == IDIGNORE)
	{
		m_strResult = _T("IGNORE 버튼을 눌렀습니다!");
		UpdateData(FALSE);
	}
}


실행 결과

image

image image image image image image