[MFC] 메시지 박스 프로그램 작성 -3
- 최초 작성일: 2022년 2월 23일 (수)
목차
[TOC]
목적
조건 1. 프로젝트 이름은 ‘MessageBoxes’로 한다.
조건 2. 버튼을 클릭하면 메시지 박스와 에디트 컨트롤에 설명을 표시한다.
결과 1. 초기화면은 다음과 같다.
결과 2. [MFC란?] 버튼을 클릭했을 때 결과는 다음과 같다.
결과 3. 6가지의 버튼을 클릭했을 때 표시되는 메시지 박스는 다음과 같다.
구현
프로젝트 생성
아래와 같이 MFC Application을 생성해준다. 프로젝트명은 MessageBoxes로 했다.
그리고, Application type (응용 프로그램 종류)는 ‘Dialog based (대화 상자 기반)’를 선택하고 [Finish] 버튼을 클릭한다.
다이얼로그 생성 및 설정
그러면 아래와 같은 창이 나오는데, 안 나온다면 [Ctrl]-[Shift]-[R] 혹은 [메뉴]-[보기]-[다른 창]-[리소스 뷰]를 클릭하면 된다.
그러면, 가운데 Dialog에 있는 모든 컨트롤들을 삭제해준다. ( [Ctrl + A] + [Delete] )
컨트롤과 속성값은 아래와 같이 설정한다.
멤버 변수 추가
버튼을 누를 때마다 Edit Control에 출력하기 위해 멤버 변수를 추가해주어야 한다.
멤버 함수를 추가하기 위해서 [메뉴]-[프로젝트]-[클래스 마법사] 또는, [Ctrl + Shift + X] 키를 눌러 [클래스 마법사]를 실행시킨다.
그럼, 아래의 창이 뜨는데 거기서 [Member Variables(멤버 변수)] 탭에서 ‘IDC_EDIT_RESULT’를 클릭한 후 ‘Add Variable(변수 추가)’ 버튼을 클릭한다.
Control Variable(제어 변수) 창에서 다음과 같이 설정하고 Finish 버튼을 클릭한다. 그 다음, 멤버 변수 ‘m_strResult’가 추가된 것을 확인하고 확인 버튼을 누른다.
또한 [클래스 뷰]-[MessageBoxes]-[CMessageBoxesDlg] 에서도 ‘m_strResult’가 추가된 것을 확인할 수 있다.
멤버 함수 추가
이제, 버튼을 눌렀을 때 함수를 실행하기 위해 멤버 함수를 추가해주어야 한다.
클래스 마법사를 키고 IDC_BUTTON_YN [명령], BN_CLICKED [메시지] 를 클릭하고 [처리기 추가] 를 눌러 멤버 함수들을 아래와 같이 추가한다.
그 다음, 아래와 같이 코드를 삽입해주고, 프로그램을 빌드한 후 실행한다.
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);
}
}
실행 결과