다음을 통해 공유


데이터 개체 및 데이터 소스: 만들기 및 소멸

설명에 따라 데이터 개체 및 데이터 소스 (OLE), 데이터 개체 및 데이터 소스 데이터 전송의 양쪽 모두를 나타냅니다.이 문서에서는 만들고 이러한 개체 및 데이터 전송을 올바르게 수행 하는 소스를 파괴 해야 하는 경우를 포함 하 여 설명 합니다.

  • 데이터 개체 만들기

  • 데이터 개체 소멸

  • 데이터 원본 만들기

  • 데이터 소스 소멸

데이터 개체 만들기

데이터 개체는 대상 응용 프로그램에 의해 사용-클라이언트 또는 서버입니다.대상 응용 프로그램의 데이터 개체는 소스 응용 프로그램과 대상 응용 프로그램 간 연결의 한쪽 끝을입니다.대상 응용 프로그램의 데이터 개체에 액세스 하 고 데이터 원본에 있는 데이터와 상호 작용할 수 있습니다.

데이터 개체가 필요한 곳에 두 가지 경우가 있습니다.끌어서 놓기를 사용 하 여 응용 프로그램에서 데이터를 삭제 하면 첫 번째 상황이입니다.편집 메뉴에서 붙여넣기 또는 선택 하 여 붙여넣기를 선택 하면 두 번째 상황이입니다.

드래그 앤 드롭 하는 상황에서 데이터 개체를 만들 필요가 없습니다.기존 데이터 개체에 대 한 포인터를 전달할 사용자 OnDrop 함수.이 데이터 개체 프레임 워크에서 끌어서 놓기 작업의 일부로 만들어지고 또한 의해 소멸 됩니다.끝나면 다른 메서드에 의해 붙여넣기가 항상 그렇지는 않습니다.자세한 내용은 데이터 개체 소멸.

응용 프로그램은 붙여넣기 또는 붙여넣기 특수 작업을 수행 하는 경우 사용자가 만들어야 합니다는 COleDataObject 개체와 호출의 AttachClipboard 멤버 함수입니다.이 클립보드의 데이터를 데이터 개체에 연결합니다.그런 다음 붙여넣기 함수에서이 데이터 개체를 사용할 수 있습니다.

이 수행 하는 방법의 예제를 참조 하십시오의 DoPasteItem 함수는 MAINVIEW에 있습니다.즉 MFC OLE 샘플의 일부 CPP 파일 OCLIENT.OCLIENT 붙여넣기 작업과 호출을 수행 하는 함수를 구현 합니다. DoPasteItem 에서 해당 OnDrop, OnPaste, 및 OnPasteLink 함수.때문에 OnDrop 는 포인터가 전달 되는 데이터 개체에 포인터를 전달 DoPasteItem.OnPasteOnPasteLink 전달 NULL 이 매개 변수에 대해 알리는 DoPasteItem 데이터 개체를 만들어 클립보드에 추가 합니다.이 구성표를 한 곳에서 디버깅 해야 하지만 여전히 두 가지 붙여넣기 작업에 사용할 수 있습니다 붙여넣기 코드를 구분 합니다.

데이터 개체 소멸

에 설명 되어 있는 스키마를 따르는 경우 데이터 개체 만들기, 데이터 개체 소멸 되는 데이터 전송의 특수 한 측면입니다.해당 붙여넣기 함수가 반환 될 때 MFC에서 붙여넣기 함수에서 생성 된 데이터 개체가 소멸 됩니다.

붙여넣기 작업을 처리 하는 다른 메서드를 수행 하는 경우에 붙여넣기 작업이 완료 된 후 데이터 개체는 소멸 됩니다 있는지 확인 하십시오.데이터 개체가 소멸 될 때까지 성공적으로 데이터를 클립보드에 복사 하는 모든 응용 프로그램에 대 한 불가능 합니다.

데이터 원본 만들기

데이터 원본에 클라이언트 또는 서버측의 데이터 전송 데이터 전송, 원본으로 사용 됩니다.원본 응용 프로그램에서 데이터 소스는 소스 응용 프로그램과 대상 응용 프로그램 간 연결의 한 쪽 끝입니다.데이터 개체는 대상 응용 프로그램에서 데이터 원본에 있는 데이터와 상호 작용할 수 있습니다.

응용 프로그램 데이터를 클립보드에 복사 하는 경우 데이터 원본이 만들어집니다.일반적인 시나리오는 다음과 같습니다.

  1. 사용자가 일부 데이터를 선택 합니다.

  2. 사용자 선택 복사 (또는 잘라내기)에서 편집 메뉴 또는 끌어서 놓기 작업을 시작 합니다.

  3. 프로그램의 디자인에 따라 응용 프로그램 하나 만듭니다는 COleDataSource 개체 또는 개체 클래스에서에서 파생 하는 데 COleDataSource.

  4. 선택한 데이터에서 함수 중 하나를 호출 하 여 데이터 소스에 삽입 되는 COleDataSource::CacheData 또는 COleDataSource::DelayRenderData 그룹.

  5. 응용 프로그램 호출에서 SetClipboard 멤버 함수 (또는 DoDragDrop 이 끌어서 놓기 작업이 있는 경우 멤버 함수) 3 단계에서 만든 개체에 속하는.

  6. 이 경우는 잘라내기 작업 또는 DoDragDrop 반환 DROPEFFECT_MOVE, 1 단계에서 선택한 데이터를 문서에서 삭제 됩니다.

이 시나리오에서 MFC OLE 샘플에서 구현 됩니다 OCLIENTHIERSVR.볼 때 각 응용 프로그램에 대 한 원본 CView-파생 클래스를 제외한 모든 GetClipboardDataOnGetClipboardData 함수.이 두 기능에는 있는 COleClientItem 또는 COleServerItem-파생 클래스 구현.이러한 샘플 프로그램 이러한 개념을 구현 하는 방법의 좋은 예를 제공 합니다.

수 있습니다 저장할 만들려면 다른 상황이 COleDataSource 개체 끌어서 놓기 작업의 기본 동작을 수정 하는 경우에 발생 합니다.자세한 내용은 끌어서 놓기: 사용자 지정 문서.

데이터 소스 소멸

데이터 소스에 현재 담당 하는 응용 프로그램에 의해 소멸 되어야 합니다.같은 상황에서는 OLE 데이터 소스를 직접 위치를 호출 COleDataSource::DoDragDrop를 호출 하면 pDataSrc-> InternalRelease.예를 들면 다음과 같습니다.

void CMyListView::OnLvnBegindrag(NMHDR *pNMHDR, LRESULT *pResult)
{
   UNREFERENCED_PARAMETER(pResult);

   LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);

   CMyDataSource* pDataSrc = new CMyDataSource();
   if (NULL != pDataSrc)
   {
      pDataSrc->Initialize(pNMLV, this);
      pDataSrc->DelayRenderData(
         (CLIPFORMAT)RegisterClipboardFormat(_T("TIGroupFiles")));
      pDataSrc->DoDragDrop();
      pDataSrc->InternalRelease();
   }
}

OLE에 데이터 소스를 전달 해야 하는 경우 다음 처럼 모든 일반적인 C++ 개체를 소멸 책임져야 합니다.

자세한 내용은 드래그 앤 드롭, 클립보드, 및 조작 데이터 개체 및 데이터 소스.

참고 항목

참조

COleDataObject 클래스

COleDataSource 클래스

개념

데이터 개체 및 데이터 소스 (OLE)