Función DoDragDrop (ole2.h)

Realiza una operación de arrastrar y colocar OLE.

Nota Debe llamar a OleInitialize antes de llamar a esta función.
 

Sintaxis

HRESULT DoDragDrop(
  [in]  LPDATAOBJECT pDataObj,
  [in]  LPDROPSOURCE pDropSource,
  [in]  DWORD        dwOKEffects,
  [out] LPDWORD      pdwEffect
);

Parámetros

[in] pDataObj

Puntero a la interfaz IDataObject en un objeto de datos que contiene los datos que se arrastran.

[in] pDropSource

Puntero a una implementación de la interfaz IDropSource , que se usa para comunicarse con el origen durante la operación de arrastre.

[in] dwOKEffects

Efectos que el origen permite en la operación de arrastrar y colocar OLE. Lo más significativo es si permite un movimiento. Los parámetros dwOKEffect y pdwEffect obtienen valores de la enumeración DROPEFFECT . Para obtener una lista de valores, consulte DROPEFFECT.

[out] pdwEffect

Puntero a un valor que indica cómo la operación de arrastrar y colocar OLE afecta a los datos de origen. El parámetro pdwEffect solo se establece si la operación no se cancela.

Valor devuelto

Esta función devuelve S_OK si se ejecuta correctamente. Otros valores posibles son los siguientes.

Código devuelto Descripción
DRAGDROP_S_DROP
La operación de arrastrar y colocar OLE se realizó correctamente.
DRAGDROP_S_CANCEL
Se canceló la operación de arrastrar y colocar OLE.
E_UNSPEC
Se ha producido un error inesperado.

Comentarios

Si está desarrollando una aplicación que puede actuar como origen de datos para una operación de arrastrar y colocar OLE, debe llamar a DoDragDrop cuando detecte que el usuario ha iniciado una operación de arrastrar y colocar OLE.

La función DoDragDrop entra en un bucle en el que llama a varios métodos en las interfaces IDropSource e IDropTarget . (Para una operación de arrastrar y colocar correctamente, la aplicación que actúa como origen de datos también debe implementar IDropSource, mientras que la aplicación de destino debe implementar IDropTarget).

  1. La función DoDragDrop determina la ventana bajo la ubicación actual del cursor. A continuación, comprueba si esta ventana es un destino de colocación válido.
  2. Si la ventana es un destino de colocación válido, DoDragDrop llama a IDropTarget::D ragEnter. Este método proporciona un código de efecto que indica lo que sucedería si realmente se produjera la caída. Para obtener una lista de efectos de colocación válidos, vea la enumeración DROPEFFECT .
  3. DoDragDrop llama a IDropSource::GiveFeedback con el código de efecto para que la interfaz de origen de colocación pueda proporcionar comentarios visuales adecuados al usuario. El puntero pDropSource pasado a DoDragDrop especifica la interfaz IDropSource adecuada.
  4. DoDragDrop realiza un seguimiento de los movimientos del cursor del mouse y los cambios en el estado del teclado o del botón del mouse.
    • Si el usuario sale de una ventana, DoDragDrop llama a IDropTarget::D ragLeave.
    • Si el mouse entra en otra ventana, DoDragDrop determina si esa ventana es un destino de colocación válido y, a continuación, llama a IDropTarget::D ragEnter para esa ventana.
    • Si el mouse se mueve pero permanece dentro de la misma ventana, DoDragDrop llama a IDropTarget::D ragOver.
  5. Si hay un cambio en el estado del teclado o del botón del mouse, DoDragDrop llama a IDropSource::QueryContinueDrag y determina si se debe continuar con la arrastrar, colocar los datos o cancelar la operación en función del valor devuelto.
    • Si el valor devuelto es S_OK, DoDragDrop llama primero a IDropTarget::D ragOver para continuar con la operación. Este método devuelve un nuevo valor de efecto y DoDragDrop , a continuación, llama a IDropSource::GiveFeedback con el nuevo efecto para que se puedan establecer los comentarios visuales adecuados. Para obtener una lista de efectos de colocación válidos, vea la enumeración DROPEFFECT . IDropTarget::D ragOver e IDropSource::GiveFeedback se emparejan para que, a medida que el mouse se mueva por el destino de colocación, el usuario recibe los comentarios más actualizados sobre la posición del mouse.
    • Si el valor devuelto es DRAGDROP_S_DROP, DoDragDrop llama a IDropTarget::D rop. La función DoDragDrop devuelve el último código de efecto al origen, por lo que la aplicación de origen puede realizar la operación adecuada en los datos de origen, por ejemplo, cortar los datos si la operación era un movimiento.
    • Si el valor devuelto es DRAGDROP_S_CANCEL, la función DoDragDrop llama a IDropTarget::D ragLeave.
DoDragDrop no admite la invocación de la compatibilidad con arrastrar y colocar al controlar la entrada táctil o de lápiz.

Para admitir la entrada táctil o de lápiz, no llame a DoDragDrop desde el controlador táctil. En su lugar, llame a DoDragDrop desde el controlador para los mensajes del mouse que el sistema sintetiza tras la entrada táctil.

La aplicación puede identificar mensajes sintetizados mediante una llamada a la función GetMessageExtraInfo . Para obtener más información sobre el uso de GetMessageExtraInfo para distinguir entre la entrada del mouse y la entrada táctil de Windows, consulta Solución de problemas de aplicaciones.

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 ole2.h
Library Ole32.lib
Archivo DLL Ole32.dll

Consulte también

IDropSource