다음을 통해 공유


IOleInPlaceObjectWindowless::GetDropTarget 메서드(ocidl.h)

끌어서 놓기를 지원하는 현재 위치 활성 창 없는 개체에 대한 IDropTarget 인터페이스를 검색합니다.

구문

HRESULT GetDropTarget(
  [out] IDropTarget **ppDropTarget
);

매개 변수

[out] ppDropTarget

창 없는 개체에 대한 인터페이스 포인터를 수신하는 IDropTarget 포인터 변수에 대한 포인터입니다.

반환 값

이 메서드는 성공에 대한 S_OK 반환합니다. 가능한 다른 반환 값은 다음과 같습니다.

반환 코드 설명
E_NOTIMPL
창 없는 개체는 끌어서 놓기를 지원하지 않습니다.

설명

창이 있는 개체는 RegisterDragDrop 함수를 호출하고 해당 창 핸들을 매개 변수로 제공하여 해당 IDropTarget 인터페이스를 등록합니다. IDropTarget 인터페이스를 등록하면 개체가 끌어서 놓기 작업에 참여할 수 있습니다. 활성 상태인 경우 창이 없으므로 창 없는 개체는 해당 IDropTarget 인터페이스를 등록할 수 없습니다. 따라서 컨테이너의 지원 없이는 끌어서 놓기 작업에 직접 참여할 수 없습니다.

다음 이벤트는 창 없는 개체와 관련된 끌어서 놓기 작업 중에 발생합니다.

  • 컨테이너는 RegisterDragDrop 함수를 통해 자체 IDropTarget 인터페이스를 등록합니다.
  • 컨테이너의 자체 IDropTarget::D ragEnter 또는 IDropTarget::D ragOver 메서드 구현에서 컨테이너는 마우스 포인터가 포함된 개체에 들어갔는지 여부를 검색합니다.
  • 개체가 비활성 상태이면 컨테이너는 개체의 IPointerInactive::GetActivationPolicy 메서드를 호출합니다. 개체는 POINTERINACTIVE_ACTIVATEONDRAG 플래그를 반환합니다. 그런 다음 컨테이너가 개체를 활성화합니다. 개체가 이미 활성화된 경우 컨테이너는 이 단계를 수행할 필요가 없습니다.
  • 개체가 활성화된 후 컨테이너는 개체의 IDropTarget 인터페이스를 가져와야 합니다.
  • 놓기 대상이 되려는 창 없는 개체는 여전히 IDropTarget 인터페이스를 구현하지만 등록하지 않으며 IUnknown::QueryInterface에 대한 호출을 통해 반환하지 않습니다. 대신 컨테이너는 개체의 IOleInPlaceObjectWindowless::GetDropTarget 메서드를 호출하여 이 인터페이스를 가져올 수 있습니다. 개체는 끌어서 놓기 작업에 참여하려는 경우 자체 IDropTarget 인터페이스에 대한 포인터를 반환합니다. 컨테이너는 나중에 사용하기 위해 이 인터페이스 포인터를 캐시할 수 있습니다. 예를 들어 컨테이너의 IDropTarget::D ragEnter 또는 IDropTarget::D ragLeave 메서드에 대한 후속 호출 시 컨테이너는 개체의 GetDropTarget 메서드를 다시 호출하는 대신 캐시된 포인터를 사용할 수 있습니다.
  • 그런 다음, 컨테이너는 개체의 IDropTarget::D ragEnter를 호출하고 자체 IDropTarget::D ragOver 또는 IDropTarget::D ragEnter 메서드에서 pdwEffect에 대해 반환된 값을 전달합니다. 이 시점부터 컨테이너는 마우스가 개체를 벗어나거나 개체에서 삭제가 발생할 때까지 모든 후속 IDropTarget::D ragOver 호출을 창 없는 개체로 전달합니다. 마우스가 개체를 벗어나면 컨테이너는 개체의 IDropTarget::D ragLeave 를 호출한 다음 개체의 IDropTarget 인터페이스를 해제합니다. 삭제가 발생하면 컨테이너는 IDropTarget::D rop 호출을 개체로 전달합니다.
  • 마지막으로 컨테이너가 개체를 비활성화합니다.
개체는 자체 IDropTarget::D ragEnter에서 S_FALSE 반환하여 데이터 개체의 데이터 형식을 허용하지 않음을 나타낼 수 있습니다. 이 경우 컨테이너는 자체적으로 데이터를 수락하고 자체 IDropTarget::D ragEnter 또는 IDropTarget::D ragOver 메서드에서 적절한 dwEffect 반환하도록 결정할 수 있습니다.

IDropTarget::D ragEnter에서 S_FALSE 반환하는 개체는 그 사이에 IDropTarget::D ragLeave 없이 IDropTarget::D ragEnter에 대한 후속 호출을 받을 준비를 해야 합니다. 실제로 컨테이너의 IDropTarget::D ragOver에 대한 다음 호출 중에 마우스가 여전히 동일한 개체 위에 있는 경우 컨테이너는 개체에서 IDropTarget::D ragEnter 를 다시 호출하도록 결정할 수 있습니다.

발신자에 대한 참고 사항

컨테이너는 나중에 사용할 수 있도록 개체의 IDropTarget 인터페이스에 대한 포인터를 캐시할 수 있습니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 ocidl.h

추가 정보

Idroptarget

IOleInPlaceObjectWindowless

IPointerInactive::GetActivationPolicy

RegisterDragDrop