MFC 모달창 열기

wsung·2026년 1월 26일
  1. 리소스(Dialog) 만들기
  • 리소스뷰 -> Dialog 선택 -> New
  • 해당 다이얼로그 선택 -> properties의 ID를 이름으로 변경
  • 필요한 컨트롤 추가 ( button , edit, list 등)
  • 각 컨트롤에 정확한 ID 지정
  1. 다이얼로그 클래스 만들기
    IDD_MODEL_SEL_DLG 우클릭 -> Add Class -> CModelSelDlg
    => ModelSelDlg.h / .cpp 생성
    생성자에 ID가 연결됨
    CModelSelDlg::CModelSelDlg(...) : CDialogEx(IDD_MODEL_SEL_DLG, pParent) {}

  2. 입력/출력 데이터 변수 만들기

  • 모달창이 사용자가 입력한 값을 밖으로 넘기려면
    - 모달 클래스에 멤버 변수 만들어야 함 CString m_strModelName;
  1. DDX로 컨트롤 <-> 변수 연결
    DoDataExchange()
    : DDX_Text(pDX, IDC_ED_MODEL_INPUT, m_strModelName);

✅ DDX 핵심 해석
UpdateData(FALSE) : 변수 → 화면
UpdateData(TRUE) : 화면 → 변수
확인할 것: DDX에서 쓰는 컨트롤 ID가 리소스에 진짜 존재하는가
(없으면 “identifier undefined” 터짐)

  1. 모달 OnInitDialog에서 초기값 표시
    BOOL CModelSelDlg::OnInitDialog()
    {
    CDialogEx::OnInitDialog();
    UpdateData(FALSE); // 변수값을 Edit에 표시
    return TRUE;
    }
  • 메인에서 넘겨준 초기 모델명을 모달 Edit에 보여주기 위해
  1. 메인에 표시용 변수 + DDX 연결

메인 다이얼로그에도 변수 만들고 Edit에 연결:

CString m_strMainModelName;
DDX_Text(pDX, IDC_ED_MODEL_NAME, m_strMainModelName);

  1. 버튼 클릭에서 DoModal 호출
    void CICTUICloneDlg::OnBnClickedButton1()
    {
    UpdateData(TRUE); // 메인 Edit -> 변수

    CModelSelDlg dlg;
    dlg.m_strModelName = m_strMainModelName; // 초기값 전달
    
    if (dlg.DoModal() == IDOK)
    {
        m_strMainModelName = dlg.m_strModelName; // 결과 받기
        UpdateData(FALSE); // 메인 변수 -> 메인 Edit 표시
    }

    }

profile
0부터 시작하는 백엔드

0개의 댓글