다음을 통해 공유


방법: Windows Forms에서 DDX/DDV 데이터 바인딩 수행

DDX_ManagedControl CWinFormsControl::CreateManagedControl을 호출하여 리소스 컨트롤 ID와 일치하는 컨트롤을 만듭니다. 마법사에서 생성된 코드에서 컨트롤을 CWinFormsControl 사용하는 DDX_ManagedControl 경우 동일한 컨트롤에 대해 명시적으로 호출 CreateManagedControl 해서는 안 됩니다.

CWnd::D oDataExchange에서 호출 DDX_ManagedControl 하여 리소스 ID에서 컨트롤을 만듭니다. 데이터 교환의 경우 Windows Forms 컨트롤에서 DDX/DDV 함수를 사용할 필요가 없습니다. 대신 다음 예제와 같이 대화 상자(또는 뷰) 클래스의 메서드에서 DoDataExchange 관리되는 컨트롤의 속성에 액세스하는 코드를 배치할 수 있습니다.

다음 예제에서는 네이티브 C++ 문자열을 .NET 사용자 정의 컨트롤에 바인딩하는 방법을 보여줍니다.

예: DDX/DDV 데이터 바인딩

다음은 .NET 사용자 정의 컨트롤의 사용자 정의 NameText 속성을 사용하여 MFC 문자열 m_str 의 DDX/DDV 데이터 바인딩 예제입니다.

컨트롤은 CDialog::OnInitDialog가 처음으로 호출 CMyDlg::DoDataExchange 할 때 만들어지므로 참조 m_UserControl 하는 모든 코드는 호출 후에 DDX_ManagedControl 와야 합니다.

방법: 대화 상자에서 사용자 컨트롤 및 호스트 만들기에서 만든 MFC01 애플리케이션에서 이 코드를 구현할 수 있습니다.

CMFC01Dlg 선언에 다음 코드를 넣습니다.

class CMFC01Dlg : public CDialog
{
   CWinFormsControl<WindowsFormsControlLibrary1::UserControl1> m_MyControl;
   CString m_str;
};

예: DoDataExchange() 구현

CMFC01Dlg 구현에 다음 코드를 넣습니다.

void CMFC01Dlg::DoDataExchange(CDataExchange* pDX)
{
   CDialog::DoDataExchange(pDX);
   DDX_ManagedControl(pDX, IDC_CTRL1, m_MyControl);

   if (pDX->m_bSaveAndValidate) {
      m_str = m_MyControl->textBox1->Text;
   } else
   {
      m_MyControl->textBox1->Text = gcnew System::String(m_str);
   }
}

예: 처리기 메서드 추가

이제 확인 단추를 클릭하기 위한 처리기 메서드를 추가합니다. 리소스 보기 탭을 클릭합니다. 리소스 뷰에서 을 IDD_MFC01_DIALOG두 번 클릭합니다. 대화 상자 리소스가 리소스 편집기에서 나타납니다. 그런 다음 확인 단추를 두 번 클릭합니다.

처리기를 다음과 같이 정의합니다.

void CMFC01Dlg::OnBnClickedOk()
{
   AfxMessageBox(CString(m_MyControl.GetControl()->textBox1->Text));
   OnOK();
}

예: textBox 텍스트 설정

BOOL CMFC01Dlg::OnInitDialog()의 구현에 다음 줄을 추가합니다.

m_MyControl.GetControl()->textBox1->Text = "hello";

이제 애플리케이션을 빌드 및 실행할 수 있습니다. 애플리케이션이 닫히면 텍스트 상자의 모든 텍스트가 팝업 메시지 상자에 표시됩니다.

참고 항목

CWinFormsControl 클래스
DDX_ManagedControl
CWnd::D oDataExchange