반응형

MFC DDX (Dynamic Data Exchange), DDV (Dynamic Data Validation) 와 UpdateData()

  • MFCDDX (Dynamic Data Exchange)대화 상자의 컨트롤과 멤버 변수 간 데이터를 자동으로 동기화하는 기능 입니다.
  • DDV (Dynamic Data Validation) 를 사용하여 입력값을 검증할 수도 있습니다.
  • UpdateData() 함수를 활용하면 컨트롤과 변수 간 데이터 교환이 가능합니다.


📌 DDX (Dynamic Data Exchange)

  • MFC에서 DoDataExchange(CDataExchange* pDX) 함수를 오버라이드하여 컨트롤과 변수 간 데이터를 주고받을 때 사용됩니다.
    • 컨트롤 → 변수 (읽기)
    • 변수 → 컨트롤 (쓰기)

  • MFC의 DDX_Text, DDX_Check 등을 활용하여 데이터 동기화를 수행합니다.

🛠 예제 코드

  • cpp

      class CMyDialog : public CDialogEx
      {
      public:
          CMyDialog() : CDialogEx(IDD_MYDIALOG) {}
      
          enum { IDD = IDD_MYDIALOG };
      
      protected:
          virtual void DoDataExchange(CDataExchange* pDX);
      
      private:
          int m_nValue; // Edit Control과 연결될 변수
      };
      
      void CMyDialog::DoDataExchange(CDataExchange* pDX)
      {
          CDialogEx::DoDataExchange(pDX);
          
          // IDC_EDIT1 컨트롤과 m_nValue 변수 연결
          DDX_Text(pDX, IDC_EDIT1, m_nValue);
      }
    


📌 DDX/DDV 함수 종류

  • 함수 설명
    DDX_Text(pDX, IDC_EDIT1, m_nValue); Edit Controlint, CString 등 데이터 동기화
    DDX_Check(pDX, IDC_CHECK1, m_bChecked); CheckboxBOOL 변수 동기화
    DDX_Radio(pDX, IDC_RADIO1, m_nRadio); Radio 버튼과 int 변수 동기화
    DDX_CBString(pDX, IDC_COMBO1, m_strCombo); ComboBoxCString 동기화
    DDX_Slider(pDX, IDC_SLIDER1, m_nSlider); Slider Controlint 동기화


📌 DDV (Dynamic Data Validation)

  • DDV 함수를 활용하면 사용자의 입력값을 검증할 수 있습니다.

🛠 입력값 검증 예제

  • cpp

      void CMyDialog::DoDataExchange(CDataExchange* pDX)
      {
          CDialogEx::DoDataExchange(pDX);
          DDX_Text(pDX, IDC_EDIT1, m_nValue);
      
          // 1~100 사이의 값만 허용
          DDV_MinMaxInt(pDX, m_nValue, 1, 100);
      }
    

  • 사용자가 IDC_EDIT1에 1~100 범위를 벗어나는 값을 입력할 경우 경고 메시지가 뜨게 됩니다.


📌 UpdateData()

  • UpdateData(TRUE)UpdateData(FALSE) 를 사용하여 컨트롤과 변수 간 데이터를 동기화할 수 있습니다.
    • UpdateData(TRUE)
      • 컨트롤 → 변수 전송
      • 대화 상자의 입력값을 변수에 저장할 때 사용
    • UpdateData(FALSE)
      • 변수 → 컨트롤 반영
      • 변수 값을 UI 컨트롤에 업데이트할 때 사용

🛠 예제 코드

  • cpp

      void CMyDialog::OnButtonClick()
      {
          UpdateData(TRUE);  // 컨트롤 → 변수
          m_nValue += 10;    // 값 변경
          UpdateData(FALSE); // 변수 → 컨트롤
      }
    

  • 위 코드에서 버튼을 클릭하면 m_nValue 값이 10 증가하고, 이를 다시 Edit Control에 표시합니다.


🔥 요약

  • DoDataExchange()에서 DDX_ 함수를 활용해 컨트롤과 변수 연결.
  • DDV_ 함수로 입력값 검증 가능.
  • UpdateData(TRUE) → 컨트롤 값 → 변수로 가져옴.
  • UpdateData(FALSE) → 변수 값 → 컨트롤에 반영.



  • 도움이 되셨으면 하단의 ❤️ 공감 버튼 부탁 드립니다. 감사합니다! 😄
  • 일부 모바일 환경에서는 ❤️ 버튼이 보이지 않습니다.

728x90
반응형

+ Recent posts