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 |
---|---|
|
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 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 |