다음을 통해 공유


데이터 개체 및 데이터 소스: 조작

데이터 개체 또는 데이터 원본을 만든 후에는 데이터 삽입 및 제거, 데이터 형식 열거 등 데이터에 대한 여러 가지 일반적인 작업을 수행할 수 있습니다. 이 문서에서는 가장 일반적인 작업을 완료하는 데 필요한 기술을 설명합니다. 다룰 주제는 다음과 같습니다.

데이터 원본에 데이터 삽입

데이터 원본에 데이터를 삽입하는 방법은 데이터가 즉시 제공되는지 또는 요청 시 제공되는지 여부와 제공된 매체에 따라 달라집니다. 가능성은 다음과 같습니다.

즉시 데이터 제공(즉시 렌더링)

  • 데이터를 제공하는 모든 클립보드 형식에 대해 반복적으로 호출 COleDataSource::CacheGlobalData 합니다. 사용할 클립보드 형식, 데이터를 포함하는 메모리에 핸들을 전달하고, 필요에 따라 데이터를 설명하는 FORMATETC 구조를 전달합니다.

    또는

  • STGMEDIUM 구조체로 직접 작업하려는 경우 위의 옵션 대신 COleDataSource::CacheGlobalData 호출 COleDataSource::CacheData 합니다.

주문형 데이터 제공(지연된 렌더링)

고급 항목입니다.

  • 데이터를 제공하는 모든 클립보드 형식에 대해 반복적으로 호출 COleDataSource::DelayRenderData 합니다. 사용할 클립보드 형식과 선택적으로 데이터를 설명하는 FORMATETC 구조를 전달합니다. 데이터가 요청되면 프레임워크가 호출 COleDataSource::OnRenderData되며 재정의해야 합니다.

    또는

  • 개체를 CFile 사용하여 데이터를 제공하는 경우 이전 옵션 대신 COleDataSource::DelayRenderData 호출 COleDataSource::DelayRenderFileData 합니다. 데이터가 요청되면 프레임워크가 호출 COleDataSource::OnRenderFileData되며 재정의해야 합니다.

데이터 개체에서 사용할 수 있는 형식 확인

애플리케이션에서 사용자가 데이터를 붙여넣을 수 있도록 허용하려면 클립보드에 처리할 수 있는 형식이 있는지 알아야 합니다. 이렇게 하려면 애플리케이션에서 다음을 수행해야 합니다.

  1. COleDataObject 개체 및 FORMATETC 구조를 만듭니다.

  2. 데이터 개체의 AttachClipboard 멤버 함수를 호출하여 데이터 개체를 클립보드의 데이터와 연결합니다.

  3. 다음 작업 중 하나를 수행합니다.

    • 필요한 형식이 하나 또는 두 개뿐인 경우 데이터 개체의 IsDataAvailable 멤버 함수를 호출합니다. 이렇게 하면 클립보드의 데이터가 애플리케이션보다 훨씬 더 많은 형식을 지원하는 경우 시간을 절약할 수 있습니다.

      또는

    • 데이터 개체의 BeginEnumFormats 멤버 함수를 호출하여 클립보드에서 사용할 수 있는 형식 열거를 시작합니다. 그런 다음 클립보드가 애플리케이션에서 지원하는 형식을 반환하거나 더 이상 형식이 없을 때까지 호출 GetNextFormat 합니다.

ON_UPDATE_COMMAND_UI 사용하는 경우 이제 [편집] 메뉴에서 [붙여넣기] 및 [특수 항목 붙여넣기]를 사용하도록 설정할 수 있습니다. 이렇게 하려면 다음 중 하나 CMenu::EnableMenuItem 또는 CCmdUI::Enable를 호출합니다. 컨테이너 애플리케이션이 메뉴 항목으로 수행해야 하는 작업 및 시기에 대한 자세한 내용은 메뉴 및 리소스: 컨테이너 추가를 참조 하세요.

데이터 개체에서 데이터 검색

데이터 형식을 결정했으면 다시 기본 데이터 개체에서 데이터를 검색하는 것입니다. 이를 위해 사용자는 데이터를 배치할 위치를 결정하고 애플리케이션은 적절한 함수를 호출합니다. 데이터는 다음 매체 중 하나에서 사용할 수 있습니다.

중간 호출할 함수
전역 메모리(HGLOBAL) COleDataObject::GetGlobalData
파일(CFile) COleDataObject::GetFileData
STGMEDIUM 구조체(IStorage) COleDataObject::GetData

일반적으로 매체는 클립보드 형식과 함께 지정됩니다. 예를 들어 CF_EMBEDDEDSTRUCT 개체는 항상 IStorage STGMEDIUM 구조가 필요한 매체에 있습니다. 따라서 STGMEDIUM 구조를 수락할 수 있는 이러한 함수 중 하나이기 때문에 사용할 GetData 수 있습니다.

클립보드 형식이 중간 또는 HGLOBAL 중간인 경우 프레임워크는 IStream 데이터를 참조하는 포인터를 CFile 제공할 수 있습니다. 그런 다음 애플리케이션은 파일 읽기를 사용하여 파일에서 데이터를 가져올 수 있는 것과 거의 동일한 방식으로 데이터를 가져올 수 있습니다. 기본적으로 데이터 원본의 루틴 및 OnRenderFileData 루틴에 OnRenderData 대한 클라이언트 쪽 인터페이스입니다.

이제 사용자는 동일한 형식의 다른 데이터와 마찬가지로 문서에 데이터를 삽입할 수 있습니다.

다음에 대해 자세히 알고 싶은 사항

참고 항목

데이터 개체 및 데이터 소스(OLE)
COleDataObject 클래스
COleDataSource 클래스