Compartir a través de


Método IOleInPlaceObjectWindowless::GetDropTarget (ocidl.h)

Recupera la interfaz IDropTarget de un objeto activo y sin ventanas que admite arrastrar y colocar.

Sintaxis

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

Parámetros

[out] ppDropTarget

Puntero a una variable de puntero IDropTarget que recibe el puntero de interfaz al objeto sin ventana.

Valor devuelto

Este método devuelve S_OK cuando funciona correctamente. Otros posibles valores devueltos son los siguientes.

Código devuelto Descripción
E_NOTIMPL
El objeto sin ventanas no admite arrastrar y colocar.

Comentarios

Un objeto con ventana registra su interfaz IDropTarget llamando a la función RegisterDragDrop y proporcionando su identificador de ventana como parámetro. El registro de su interfaz IDropTarget permite al objeto participar en las operaciones de arrastrar y colocar. Dado que no tiene una ventana cuando está activa, un objeto sin ventanas no puede registrar su interfaz IDropTarget . Por lo tanto, no puede participar directamente en las operaciones de arrastrar y colocar sin compatibilidad con su contenedor.

Los siguientes eventos se producen durante una operación de arrastrar y colocar que implica objetos sin ventana:

  • El contenedor registra su propia interfaz IDropTarget a través de la función RegisterDragDrop .
  • En la implementación del contenedor de sus propios métodos IDropTarget::D ragEnter o IDropTarget::D ragOver , el contenedor detecta si el puntero del mouse acaba de escribir un objeto incrustado.
  • Si el objeto está inactivo, el contenedor llama al método IPointerInactive::GetActivationPolicy del objeto. El objeto devuelve la marca POINTERINACTIVE_ACTIVATEONDRAG. A continuación, el contenedor activa el objeto en contexto. Si el objeto ya estaba activo, el contenedor no tiene que realizar este paso.
  • Una vez activo el objeto, el contenedor debe obtener la interfaz IDropTarget del objeto.
  • Un objeto sin ventana que desea ser un destino de colocación sigue implementando la interfaz IDropTarget , pero no la registra y no la devuelve a través de llamadas a IUnknown::QueryInterface. En su lugar, el contenedor puede obtener esta interfaz llamando al método IOleInPlaceObjectWindowless::GetDropTarget del objeto. El objeto devuelve un puntero a su propia interfaz IDropTarget si quiere participar en las operaciones de arrastrar y colocar. El contenedor puede almacenar en caché este puntero de interfaz para su uso posterior. Por ejemplo, en las llamadas posteriores a los métodos IDropTarget::D ragEnter o IDropTarget::D ragLeave del contenedor, el contenedor puede usar el puntero almacenado en caché en lugar de volver a llamar al método GetDropTarget del objeto.
  • A continuación, el contenedor llama al IDropTarget::D ragEnter del objeto y pasa el valor devuelto para pdwEffect desde sus propios métodos IDropTarget::D ragOver o IDropTarget::D ragEnter . A partir de este punto, el contenedor reenvía todas las llamadas IDropTarget::D ragOver posteriores al objeto sin ventanas hasta que el mouse sale del objeto o se produce una caída en el objeto. Si el mouse deja el objeto, el contenedor llama a IDropTarget::D ragLeave del objeto y, a continuación, libera la interfaz IDropTarget del objeto. Si se produce la colocación, el contenedor reenvía la llamada IDropTarget::D rop al objeto.
  • Por último, el contenedor en contexto desactiva el objeto .
Un objeto puede devolver S_FALSE de su propio objeto IDropTarget::D ragEnter para indicar que no acepta ninguno de los formatos de datos del objeto de datos. En ese caso, el contenedor puede decidir aceptar los datos para sí mismo y devolver un dwEffect adecuado de sus propios métodos IDropTarget::D ragEnter o IDropTarget::D ragOver .

Un objeto que devuelve S_FALSE de IDropTarget::D ragEnter debe estar preparado para recibir llamadas posteriores a IDropTarget::D ragEnter sin IDropTarget::D ragLeave entre sí. De hecho, si el mouse sigue sobre el mismo objeto durante la siguiente llamada a IDropTarget::D ragOver del contenedor, el contenedor puede decidir intentar llamar a IDropTarget::D ragEnter de nuevo en el objeto.

Notas a los autores de llamadas

Un contenedor puede almacenar en caché el puntero a la interfaz IDropTarget del objeto para su uso posterior.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado ocidl.h

Consulte también

IDropTarget

IOleInPlaceObjectWindowless

IPointerInactive::GetActivationPolicy

RegisterDragDrop