MFC 컨트롤을 ActiveX: 있는 ActiveX 컨트롤에 데이터 바인딩을 사용

보다 강력한 ActiveX 컨트롤의 용도 중 하나는 데이터베이스의 특정 필드에 바인딩할 컨트롤의 속성을 데이터 바인딩입니다.데이터 바인딩된 속성의 사용자를 수정할 때 데이터베이스 및 레코드 필드를 업데이트 하도록 요청 컨트롤을 알립니다.데이터베이스에 다음 컨트롤의 성공 또는 실패 요청을 알립니다.

이 문서에서는 컨트롤 측면에서의 작업에 설명합니다.구현 하는 데이터베이스와의 데이터 바인딩 상호 작용 컨트롤 컨테이너의 책임입니다.데이터베이스 상호 작용을 관리 하는 방법을 사용자 컨테이너에는이 설명서에서 다루지입니다.이 문서의 나머지 부분에서 컨트롤에 데이터 바인딩을 준비 하는 방법을 설명 합니다.

데이터 바인딩된 컨트롤의 개념도

데이터 바인딩된 컨트롤

COleControl 클래스는 데이터 바인딩을 구현 하기 쉬운 작업을 확인 하는 두 멤버 함수를 제공 합니다.첫 번째 함수, BoundPropertyRequestEdit, 속성 값을 변경할 수 있는 권한을 요청 하는 데 사용 됩니다.BoundPropertyChanged, 속성 값이 변경 된 후 두 번째 함수를 호출 합니다.

이 문서에서는 다음 항목을 다룹니다.

  • 바인딩할 수 있는 스톡 속성 만들기

  • 바인딩할 수 있는 Get/Set 메서드 만들기

바인딩할 수 있는 스톡 속성 만들기

더 많이 할 것 이지만 데이터 바인딩된 스톡 속성을 만들 수 있습니다는 바인딩할 수 있는 get/set 메서드.

[!참고]

스톡 속성을 갖고 있는 바인딩할 수 있는requestedit 기본적으로 특성.

속성 추가 마법사를 사용 하 여 바인딩할 수 있는 스톡 속성을 추가 하려면

  1. 사용 하 여 프로젝트를 시작 하는 ActiveX 컨트롤 마법사 MFC.

  2. 컨트롤의 인터페이스 노드를 마우스 오른쪽 단추로 클릭 합니다.

    이 바로 가기 메뉴가 열립니다.

  3. 바로 가기 메뉴에서 클릭 추가 누른 다음 속성 추가.

  4. 항목 중 하나를 선택 하는 속성이름 드롭 다운 목록.선택할 수 있습니다 예를 들어, 텍스트.

    때문에 텍스트 되는 스톡 속성의 바인딩할 수 있는requestedit 특성이 이미 체크 합니다.

  5. 다음 확인란을 선택 합니다.는 IDL 특성 탭: displaybinddefaultbind 특성은 프로젝트의 속성 정의를 추가 합니다.IDL 파일입니다.이러한 사용자에 게 컨트롤이 보이게 특성과 스톡 속성 기본 바인딩 가능 속성을 확인 합니다.

이 시점에서 컨트롤 데이터 소스의 데이터를 표시할 수 있습니다 있지만 사용자가 데이터 필드를 업데이트할 수 없습니다.데이터를 업데이트 하 고 변경할 수 있도록 하려면 컨트롤을 원하는 경우는 OnOcmCommandOnOcmCommand 함수를 다음과 같습니다:

#ifdef _WIN32
   WORD wNotifyCode = HIWORD(wParam);
#else
   WORD wNotifyCode = HIWORD(lParam);
#endif

   if(wNotifyCode==EN_CHANGE)
   {
      if(!BoundPropertyRequestEdit(DISPID_TEXT))
      {
         SetNotSupported();
      }
      else
      {
         GetText();
         // Notify container of change
         BoundPropertyChanged(DISPID_TEXT);
      }
   }

   return 0;

이제 컨트롤을 등록 하는 프로젝트를 빌드할 수 있습니다.대화 상자에 컨트롤을 삽입할 때 해당 데이터 필드데이터 원본 속성 됩니다 추가 되었습니다 및 이제 데이터 소스와 컨트롤에 표시할 필드를 선택할 수 있습니다.

바인딩할 수 있는 Get/Set 메서드 만들기

데이터 get/set 메서드 바인딩 뿐만 아니라, 또한 만들 수 있는 바인딩할 수 있는 스톡 속성.

[!참고]

이 절차에서는 Windows 컨트롤 해당 서브 프로젝트는 ActiveX 컨트롤 가정 합니다.

속성 추가 마법사를 사용 하 여 바인딩할 수 있는 get/set 메서드를 추가 하려면

  1. 컨트롤의 프로젝트를 로드 합니다.

  2. 제어 설정 페이지에서 컨트롤을 서브클래싱하는 창 클래스를 선택 합니다.예를 들어, EDIT 컨트롤 서브클래싱하려면을 할 수 있습니다.

  3. 컨트롤의 프로젝트를 로드 합니다.

  4. 컨트롤의 인터페이스 노드를 마우스 오른쪽 단추로 클릭 합니다.

    이 바로 가기 메뉴가 열립니다.

  5. 바로 가기 메뉴에서 클릭 추가 누른 다음 속성 추가.

  6. 속성 이름을 입력은 속성 이름 상자.사용 MyProp 이 합니다.

  7. 선택한 데이터 형식에서의 속성 형식 드롭 다운 목록 상자.사용 짧은 이 합니다.

  8. 에 대 한 형식 구현를 클릭 Get/Set 메서드.

  9. IDL 특성 탭에서 다음 확인란을 선택: 바인딩할 수 있는, requestedit, displaybind, 및 defaultbind 특성은 프로젝트의 속성 정의를 추가 합니다.IDL 파일입니다.이러한 사용자에 게 컨트롤이 보이게 특성과 스톡 속성 기본 바인딩 가능 속성을 확인 합니다.

  10. 마침을 클릭합니다.

  11. 본문 수정는 SetMyProp 함수는 다음 코드를 포함:

    if(!BoundPropertyRequestEdit(1))
    {
       SetNotSupported();
       return;
    }
    else
    {
       if(AmbientUserMode()) // SendMessage only at run-time
       {
          _stprintf_s(m_strText.GetBuffer(10), 10, _T("%d"), newVal);
          SetWindowText(m_strText);
          m_strText.ReleaseBuffer();
       }
       else
       {
          InvalidateControl();
       }
    
       // Signal a property change
       // This is the MFC equivalent of OnChanged()
       BoundPropertyChanged(1);
       SetModifiedFlag();
    }
    
  12. 매개 변수를 전달 하는 BoundPropertyChanged 및 BoundPropertyRequestEdit 함수를 합한 것 특성을 속성에 전달 된 매개 변수는 속성의 dispid입니다의.IDL 파일입니다.

  13. 수정에 OnOcmCommand 다음 코드 포함 된 작동:

    #ifdef _WIN32
       WORD wNotifyCode = HIWORD(wParam);
    #else
       WORD wNotifyCode = HIWORD(lParam);
    #endif
    
       if(wNotifyCode==EN_CHANGE)
       {
          if(!BoundPropertyRequestEdit(DISPID_TEXT))
          {
             SetNotSupported();
          }
          else
          {
             GetText();
             // Notify container of change
             BoundPropertyChanged(DISPID_TEXT);
          }
       }
    
       return 0;
    
  14. 수정에 OnDraw 함수는 다음 코드를 포함:

    if(!AmbientUserMode())
    {
       // Draw the Text property at design-time
       pdc->FillRect(rcBounds, 
          CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
       pdc->DrawText(m_strText, -1, (LPRECT)&rcBounds, 
          DT_LEFT | DT_TOP | DT_SINGLELINE);
    }
    else
    {
       DoSuperclassPaint(pdc, rcBounds);
    }
    
  15. 컨트롤 클래스의 헤더 파일 헤더 파일의 공용 섹션에 다음 정의 (생성자) 멤버 변수에 대 한 추가 합니다.

    CString m_strText;
    short m_nMyNum;
    
  16. 마지막 줄에서 다음 줄을 확인은 DoPropExchange 함수:

    PX_String(pPX, _T("MyProp"), m_strText);
    
  17. 수정에 OnResetState 함수는 다음 코드를 포함:

        COleControl::OnResetState();  // Resets defaults found in DoPropExchange
       m_strText = AmbientDisplayName();
    
  18. 수정에 GetMyProp 함수는 다음 코드를 포함:

    if(AmbientUserMode())
    {
       GetWindowText(m_strText);
       m_nMyNum = (short)_ttoi(m_strText);
    }
    return m_nMyNum;
    

이제 컨트롤을 등록 하는 프로젝트를 빌드할 수 있습니다.대화 상자에 컨트롤을 삽입할 때 해당 데이터 필드데이터 원본 속성 됩니다 추가 되었습니다 및 이제 데이터 소스와 컨트롤에 표시할 필드를 선택할 수 있습니다.

참고 항목

참조

데이터 바인딩된 컨트롤(ADO 및 RDO)

개념

MFC 컨트롤을 ActiveX