반도체/MFC

[우주여행] 2.MFC로 실용적인 애플리케이션 만들기!

Clair_de_Lune 2024. 12. 17. 11:34
728x90

형님, MFC로 C++ 두 번째 강의 시작합니다! 🚀🎉 이제 MFC의 진짜 마법을 배우면서 더 강력한 애플리케이션을 만들어 볼 차례예요! 준비 되셨나요? 🔥💥

제 2장: MFC로 실용적인 애플리케이션 만들기!

이번에는 버튼 클릭 이벤트 처리다양한 윈도우 컨트롤을 다루는 방법을 배울 거예요! 으하하, 진짜 멋진 GUI 프로그램을 만들 준비가 된 거죠?! 👑✨


1. 버튼 클릭 이벤트 처리하기! 🎯

형님, 버튼 클릭 이벤트를 처리하는 방법은 MFC의 핵심입니다! 버튼을 클릭하면 특정 작업이 수행되는 방식인데요, 이것은 윈도우 프로그램에서 가장 중요한 부분이에요!

버튼 클릭 이벤트 처리 코드!

#include "stdafx.h"
#include <afxwin.h>  // MFC 핵심 헤더 파일

// CMyWinApp 클래스 정의
class CMyWinApp : public CWinApp {
public:
    virtual BOOL InitInstance();
};

// CMyWinApp 객체 생성
CMyWinApp theApp;

class CMyWnd : public CFrameWnd {
public:
    CMyWnd();
    afx_msg void OnButtonClick();  // 버튼 클릭 이벤트 처리 함수
    DECLARE_MESSAGE_MAP()  // 메시지 맵 선언
};

BEGIN_MESSAGE_MAP(CMyWnd, CFrameWnd)
    ON_COMMAND(1, &CMyWnd::OnButtonClick)  // 버튼 클릭 시 이벤트 처리
END_MESSAGE_MAP()

CMyWnd::CMyWnd() {
    Create(NULL, _T("Hello, MFC with Button Click"));
    
    // 버튼 생성: 버튼의 ID는 1
    CButton* pButton = new CButton;
    pButton->Create(_T("Click Me!"), WS_CHILD | WS_VISIBLE, CRect(50, 50, 200, 100), this, 1);
}

void CMyWnd::OnButtonClick() {
    AfxMessageBox(_T("버튼이 클릭되었습니다!"));  // 클릭 시 메시지 박스 출력
}

BOOL CMyWinApp::InitInstance() {
    CMyWnd* pFrame = new CMyWnd;
    m_pMainWnd = pFrame;
    
    pFrame->ShowWindow(SW_NORMAL);  // 창 보이기
    pFrame->UpdateWindow();
    
    return TRUE;
}

설명:

  • CMyWnd: CFrameWnd를 상속받은 클래스로, 윈도우 창을 담당합니다.
  • CButton: 버튼을 생성하고, 그 버튼을 클릭했을 때 OnButtonClick 함수가 호출됩니다! 이 함수에서 메시지 박스가 뜨면서 버튼 클릭 이벤트가 처리됩니다!
  • DECLARE_MESSAGE_MAPBEGIN_MESSAGE_MAP: MFC에서 이벤트 처리를 위한 메시지 맵을 설정하는 부분입니다. 버튼 클릭과 같은 이벤트이 맵에 등록해서 처리해요!

2. 텍스트 박스와 버튼을 이용한 입력/출력! 📝

형님, 이제 텍스트 박스를 추가하고, 버튼 클릭 시 텍스트 박스에 입력한 값을 메시지 박스로 출력해보겠습니다! 이것은 사용자 입력을 받아서 처리하는 프로그램의 기본이에요!

텍스트 박스와 버튼을 이용한 입력/출력 코드!

#include "stdafx.h"
#include <afxwin.h>  // MFC 핵심 헤더 파일

// CMyWinApp 클래스 정의
class CMyWinApp : public CWinApp {
public:
    virtual BOOL InitInstance();
};

// CMyWinApp 객체 생성
CMyWinApp theApp;

class CMyWnd : public CFrameWnd {
public:
    CMyWnd();
    afx_msg void OnButtonClick();  // 버튼 클릭 이벤트 처리 함수
    DECLARE_MESSAGE_MAP()  // 메시지 맵 선언

private:
    CEdit m_editBox;  // 텍스트 박스를 위한 멤버 변수
};

BEGIN_MESSAGE_MAP(CMyWnd, CFrameWnd)
    ON_COMMAND(1, &CMyWnd::OnButtonClick)  // 버튼 클릭 시 이벤트 처리
END_MESSAGE_MAP()

CMyWnd::CMyWnd() {
    Create(NULL, _T("Hello, MFC with TextBox"));

    // 텍스트 박스 생성: 크기와 위치 설정
    m_editBox.Create(ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER, CRect(50, 50, 250, 80), this, 1);

    // 버튼 생성: ID 2
    CButton* pButton = new CButton;
    pButton->Create(_T("Show Text!"), WS_CHILD | WS_VISIBLE, CRect(50, 100, 200, 140), this, 2);
}

void CMyWnd::OnButtonClick() {
    CString strText;
    m_editBox.GetWindowText(strText);  // 텍스트 박스에서 텍스트 가져오기
    AfxMessageBox(strText);  // 가져온 텍스트를 메시지 박스로 출력
}

BOOL CMyWinApp::InitInstance() {
    CMyWnd* pFrame = new CMyWnd;
    m_pMainWnd = pFrame;

    pFrame->ShowWindow(SW_NORMAL);  // 창 보이기
    pFrame->UpdateWindow();

    return TRUE;
}

설명:

  • CEdit: MFC에서 제공하는 텍스트 박스 컨트롤입니다! 사용자가 텍스트를 입력할 수 있게 해줘요.
  • GetWindowText(): 텍스트 박스에 입력된 값을 가져오는 함수입니다!
  • AfxMessageBox(): 가져온 텍스트를 메시지 박스로 출력하는 함수입니다!

이제 버튼을 클릭하면, 텍스트 박스에 입력한 내용메시지 박스로 출력될 거예요! 🎉


3. 레이블(Label)과 다양한 컨트롤 추가하기!

형님, 윈도우 창에 **라벨(텍스트 레이블)**을 추가해서 정보를 표시하거나, 콤보 박스, 리스트 박스와 같은 다양한 컨트롤도 다뤄볼 거예요!

라벨 추가 코드!

#include "stdafx.h"
#include <afxwin.h>  // MFC 핵심 헤더 파일

class CMyWinApp : public CWinApp {
public:
    virtual BOOL InitInstance();
};

class CMyWnd : public CFrameWnd {
public:
    CMyWnd();
    afx_msg void OnButtonClick();
    DECLARE_MESSAGE_MAP()

private:
    CStatic m_label;  // 텍스트 레이블을 위한 멤버 변수
};

BEGIN_MESSAGE_MAP(CMyWnd, CFrameWnd)
    ON_COMMAND(1, &CMyWnd::OnButtonClick)
END_MESSAGE_MAP()

CMyWnd::CMyWnd() {
    Create(NULL, _T("Hello, MFC with Label"));
    
    // 레이블 생성: 텍스트 설정
    m_label.Create(_T("This is a label"), WS_CHILD | WS_VISIBLE, CRect(50, 50, 300, 80), this, 1);
}

void CMyWnd::OnButtonClick() {
    m_label.SetWindowText(_T("Label Updated!"));  // 버튼 클릭 시 레이블 텍스트 변경
}

BOOL CMyWinApp::InitInstance() {
    CMyWnd* pFrame = new CMyWnd;
    m_pMainWnd = pFrame;

    pFrame->ShowWindow(SW_NORMAL);
    pFrame->UpdateWindow();

    return TRUE;
}

설명:

  • CStatic: 텍스트 레이블을 생성하는 MFC 클래스입니다. Create() 함수로 레이블을 만들고, **SetWindowText()**로 레이블의 텍스트를 변경할 수 있습니다!

오늘의 결론!

형님, 오늘은 MFC로 버튼 클릭 이벤트 처리, 텍스트 박스와 버튼을 이용한 입력/출력, 라벨 추가까지 배웠어요! 이제 사용자와 상호작용하는 프로그램을 만들 수 있게 되었죠?! 🚀💥

다음에는 더 복잡한 UI 구성메시지 처리에 대해 배워보며 MFC의 마법을 계속 확장해 나갈 거예요! 😎🔥

형님, C++의 윈도우 프로그램 마스터가 되는 그 날까지 힘차게 달려갑시다!! 💪🌟

728x90