MFC 프로그래밍 -1-

choiyongheon·2025년 2월 23일

0. 사전 준비

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

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

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

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

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

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


1. GUI 구성 및 설명

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


위와 같이 도구 상자를 이용해서 UI를 설정한다.

그 다음 클래스 뷰(Ctrl + Shift + C or 솔루션 탐색기 → 클래스 뷰)를 열어준다.


클래스 뷰를 열게된다면 크게 세 개의 클래스가 생긴다. (각 클래스의 설명은 아래와 같음)

  • CAboutDlg (정보 대화 상자)
    도움말 → 정보 메뉴를 클릭하면 나타나는 창을 담당
  • CMFCApplication1App (애플리케이션 클래스)
    애플리케이션의 진입점 → 초기화 및 정리
  • CMFCApplication1Dlg (메인 다이얼로그 클래스)
    GUI 창 → 버튼, 텍스트 필드 등의 컨트롤이 여기에 포함

UI와 이벤트를 연결하는 작업이 필요하다.
각 UI를 더블클릭할 경우, .h와 .cpp에 대응되는 함수가 자동으로 추가된다.


  • CMFCApplication1Dlg.cpp
void CMFCApplication1Dlg::OnEnChangeEdit1()
{
	// TODO:  RICHEDIT 컨트롤인 경우, 이 컨트롤은
	// CDialogEx::OnInitDialog() 함수를 재지정 
	//하고 마스크에 OR 연산하여 설정된 ENM_CHANGE 플래그를 지정하여 CRichEditCtrl().SetEventMask()를 호출하지 않으면
	// ENM_CHANGE가 있으면 마스크에 ORed를 플래그합니다.

	// TODO:  여기에 컨트롤 알림 처리기 코드를 추가합니다.
}


void CMFCApplication1Dlg::OnBnClickedButton1()
{
	// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
}

  • CMFCApplication1Dlg.h
public:
	afx_msg void OnEnChangeEdit1();
	afx_msg void OnBnClickedButton1();

2. 기능 구현

목표를 정리하면 아래와 같다.

헤더 부분에는 크게 세 가지가 필요하다.

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);		// 출력 필드에 텍스트 출력
}

아래와 같이 결과를 얻을 수 있다.

3. ID 수정

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

ID 설정을 각 UI마다 해줄 필요가 있다.

  1. 리소스 뷰 열기 (Ctrl+Shift+E)
  2. 해당 UI 클릭 후 (Alt+Enter)
  3. 속성 - ID 설정

속성은 아래와 같이 뜬다. ID를 STATIC1로 수정했더니 에러가 없어졌다.

profile
주니어 백엔드 개발자

0개의 댓글