데이터 개체 또는 데이터 원본을 만든 후에는 데이터 삽입 및 제거, 데이터 형식 열거 등 데이터에 대한 여러 가지 일반적인 작업을 수행할 수 있습니다. 이 문서에서는 가장 일반적인 작업을 완료하는 데 필요한 기술을 설명합니다. 항목은 다음과 같습니다.
데이터 원본에 데이터 삽입
데이터 원본에 데이터를 삽입하는 방법은 데이터가 즉시 제공되는지 또는 요청 시 제공되는지 여부와 제공된 매체에 따라 달라집니다. 가능성은 다음과 같습니다.
즉시 데이터 제공(즉시 렌더링)
데이터를 제공하는 모든 클립보드 형식에 대해 반복적으로 호출
COleDataSource::CacheGlobalData
합니다. 사용할 클립보드 형식, 데이터를 포함하는 메모리에 핸들을 전달하고, 필요에 따라 데이터를 설명하는 FORMATETC 구조를 전달합니다.-또는-
STGMEDIUM 구조체로 직접 작업하려는 경우 위의 옵션 대신
COleDataSource::CacheData
을 호출합니다.
주문형 데이터 제공(지연된 렌더링)
고급 항목입니다.
데이터를 제공하는 모든 클립보드 형식에 대해 반복적으로 호출
COleDataSource::DelayRenderData
합니다. 사용할 클립보드 형식과 선택적으로 데이터를 설명하는 FORMATETC 구조를 전달합니다. 데이터가 요청되면 프레임워크에서COleDataSource::OnRenderData
를 호출하며, 이 메서드를 사용자가 재정의해야 합니다.-또는-
개체를
CFile
사용하여 데이터를 제공하는 경우 이전 옵션 대신COleDataSource::DelayRenderFileData
호출합니다COleDataSource::DelayRenderData
. 데이터가 요청되면 프레임워크에서COleDataSource::OnRenderFileData
를 호출하며, 이 메서드를 사용자가 재정의해야 합니다.
데이터 개체에서 사용할 수 있는 형식 확인
애플리케이션에서 사용자가 데이터를 붙여넣을 수 있도록 허용하려면 클립보드에 처리할 수 있는 형식이 있는지 알아야 합니다. 이렇게 하려면 애플리케이션에서 다음을 수행해야 합니다.
COleDataObject
개체 및 FORMATETC 구조를 만듭니다.데이터 개체의
AttachClipboard
멤버 함수를 호출하여 데이터 개체를 클립보드의 데이터와 연결합니다.다음 중 하나를 수행합니다.
필요한 형식이 하나 또는 두 개뿐인 경우 데이터 개체의
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 구조가 필요한 매체에 있습니다. 따라서 GetData
구조를 수락할 수 있는 이러한 함수 중 하나이기 때문에 사용할 수 있습니다.
클립보드 형식이 IStream
또는 HGLOBAL
매체인 경우, 프레임워크는 데이터를 참조하는 CFile
포인터를 제공할 수 있습니다. 그런 다음 애플리케이션은 파일 읽기를 사용하여 파일에서 데이터를 가져올 수 있는 것과 거의 동일한 방식으로 데이터를 가져올 수 있습니다. 본질적으로, 이는 데이터 소스의 OnRenderData
루틴과 OnRenderFileData
루틴에 대한 클라이언트 측 인터페이스입니다.
이제 사용자는 동일한 형식의 다른 데이터와 마찬가지로 문서에 데이터를 삽입할 수 있습니다.