Visual Studio 기반으로 MFC 프로그래밍을 하기 위해서는 installer를 통한 세팅이 필요하다.

위와 같이 C++ MFC 빌드 도구 설치 후 정상적으로 설치되었다면 아래와 같이 새 프로젝트 템플릿 생성이 가능하다.

MFC 앱 - 애플리케이션 종류 - 대화 상자 기반 선택

애플리케이션 종류에는 여러가지가 있는데 설명은 아래와 같다.

프로젝트 생성 후 디버그 할 시 아래와 같이 빈 상자가 뜨면 끝!

혹시라도 초기에 저렇게 박스가 뜨지 않는다면, 아래와 같이 리소스에 접근한다면 된다. (보기 - 다른 창 - 리소스 뷰)

- 목표
버튼을 클릭할 경우, text 필드에 입력된 문구를 밑에 그대로 출력

위와 같이 도구 상자를 이용해서 UI를 설정한다.
그 다음 클래스 뷰(Ctrl + Shift + C or 솔루션 탐색기 → 클래스 뷰)를 열어준다.

클래스 뷰를 열게된다면 크게 세 개의 클래스가 생긴다. (각 클래스의 설명은 아래와 같음)
- CAboutDlg (정보 대화 상자)
도움말 → 정보 메뉴를 클릭하면 나타나는 창을 담당- CMFCApplication1App (애플리케이션 클래스)
애플리케이션의 진입점 → 초기화 및 정리- CMFCApplication1Dlg (메인 다이얼로그 클래스)
GUI 창 → 버튼, 텍스트 필드 등의 컨트롤이 여기에 포함
UI와 이벤트를 연결하는 작업이 필요하다.
각 UI를 더블클릭할 경우, .h와 .cpp에 대응되는 함수가 자동으로 추가된다.
void CMFCApplication1Dlg::OnEnChangeEdit1()
{
// TODO: RICHEDIT 컨트롤인 경우, 이 컨트롤은
// CDialogEx::OnInitDialog() 함수를 재지정
//하고 마스크에 OR 연산하여 설정된 ENM_CHANGE 플래그를 지정하여 CRichEditCtrl().SetEventMask()를 호출하지 않으면
// ENM_CHANGE가 있으면 마스크에 ORed를 플래그합니다.
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
}
void CMFCApplication1Dlg::OnBnClickedButton1()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
}
public:
afx_msg void OnEnChangeEdit1();
afx_msg void OnBnClickedButton1();
목표를 정리하면 아래와 같다.

헤더 부분에는 크게 세 가지가 필요하다.
public:
afx_msg void OnBnClickedButton1();
private:
CString m_InputText; // 입력되는 텍스트
CEdit m_EditControl; // 입력되는 Edit 텍스트 필드
CStatic m_OutputText; // 출력되는 static 필드
또한 cpp에는 아래와 같은 코드를 추가해야한다.
- DoDataExchange = ui 요소 연결
- OnBnClickedButton1 = 버튼 이벤트
// UI 요소 연결
void CMFCApplication1Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT1, m_EditControl); // 입력창 연결
DDX_Control(pDX, IDC_STATIC, m_OutputText); // 출력창 연결
}
void CMFCApplication1Dlg::OnBnClickedButton1()
{
m_EditControl.GetWindowText(m_InputText); // 입력 필드에 텍스트 저장
m_OutputText.SetWindowText(m_InputText); // 출력 필드에 텍스트 출력
}
아래와 같이 결과를 얻을 수 있다.

아래와 같은 런타임 에러가 뜬다면 ID 설정이 잘못된 것이다.

ID 설정을 각 UI마다 해줄 필요가 있다.
- 리소스 뷰 열기 (Ctrl+Shift+E)
- 해당 UI 클릭 후 (Alt+Enter)
- 속성 - ID 설정
속성은 아래와 같이 뜬다. ID를 STATIC1로 수정했더니 에러가 없어졌다.
