Função DoDragDrop (ole2.h)

Executa uma operação de arrastar e soltar OLE.

Nota Você deve chamar OleInitialize antes de chamar essa função.
 

Sintaxe

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

Parâmetros

[in] pDataObj

Ponteiro para a interface IDataObject em um objeto de dados que contém os dados que estão sendo arrastados.

[in] pDropSource

Ponteiro para uma implementação da interface IDropSource , que é usada para se comunicar com a origem durante a operação de arrastar.

[in] dwOKEffects

Afeta a origem permitida na operação de arrastar e soltar OLE. O mais significativo é se permite uma mudança. Os parâmetros dwOKEffect e pdwEffect obtêm valores da enumeração DROPEFFECT . Para obter uma lista de valores, consulte DROPEFFECT.

[out] pdwEffect

Ponteiro para um valor que indica como a operação de arrastar e soltar OLE afetou os dados de origem. O parâmetro pdwEffect será definido somente se a operação não for cancelada.

Retornar valor

Essa função retorna S_OK em caso de êxito. Outros valores possíveis incluem o seguinte.

Código de retorno Descrição
DRAGDROP_S_DROP
A operação de arrastar e soltar OLE foi bem-sucedida.
DRAGDROP_S_CANCEL
A operação de arrastar e soltar OLE foi cancelada.
E_UNSPEC
Ocorreu um erro inesperado.

Comentários

Se você estiver desenvolvendo um aplicativo que pode atuar como uma fonte de dados para uma operação de arrastar e soltar OLE, chame DoDragDrop quando detectar que o usuário iniciou uma operação de arrastar e soltar OLE.

A função DoDragDrop insere um loop no qual chama vários métodos nas interfaces IDropSource e IDropTarget . (Para uma operação de arrastar e soltar bem-sucedida, o aplicativo que atua como fonte de dados também deve implementar o IDropSource, enquanto o aplicativo de destino deve implementar IDropTarget.)

  1. A função DoDragDrop determina a janela sob o local atual do cursor. Em seguida, ele verifica se essa janela é um destino de soltar válido.
  2. Se a janela for um destino de soltar válido, o DoDragDropchamará IDropTarget::D ragEnter. Esse método fornece um código de efeito que indica o que aconteceria se a queda realmente ocorresse. Para obter uma lista de efeitos de soltar válidos, consulte a enumeração DROPEFFECT .
  3. DoDragDrop chama IDropSource::GiveFeedback com o código de efeito para que a interface de origem de soltar possa fornecer comentários visuais apropriados para o usuário. O ponteiro pDropSource passado para DoDragDrop especifica a interface IDropSource apropriada.
  4. O DoDragDrop rastreia os movimentos e as alterações do cursor do mouse no estado do teclado ou do botão do mouse.
  5. Se houver uma alteração no estado do botão do teclado ou do mouse, o DoDragDropchamará IDropSource::QueryContinueDrag e determinará se deseja continuar o arrastar, remover os dados ou cancelar a operação com base no valor retornado.
    • Se o valor retornado for S_OK, o DoDragDrop primeiro chamará IDropTarget::D ragOver para continuar a operação. Esse método retorna um novo valor de efeito e DoDragDrop , em seguida, chama IDropSource::GiveFeedback com o novo efeito para que os comentários visuais apropriados possam ser definidos. Para obter uma lista de efeitos de soltar válidos, consulte a enumeração DROPEFFECT . IDropTarget::D ragOver e IDropSource::GiveFeedback são emparelhados para que, à medida que o mouse se move pelo destino de soltar, o usuário recebe os comentários mais atualizados sobre a posição do mouse.
    • Se o valor retornado for DRAGDROP_S_DROP, DoDragDropchamará IDropTarget::D rop. A função DoDragDrop retorna o último código de efeito para a origem, para que o aplicativo de origem possa executar a operação apropriada nos dados de origem, por exemplo, recortar os dados se a operação for uma movimentação.
    • Se o valor retornado for DRAGDROP_S_CANCEL, a função DoDragDropchamará IDropTarget::D ragLeave.
O DoDragDrop não dá suporte à invocação de suporte para arrastar e soltar quando você manipula a entrada por toque ou caneta.

Para dar suporte à entrada por toque ou caneta, não chame DoDragDrop do manipulador de toque. Em vez disso, chame DoDragDrop do manipulador para as mensagens do mouse que o sistema sintetiza após a entrada por toque.

O aplicativo pode identificar mensagens sintetizadas chamando a função GetMessageExtraInfo . Para obter mais informações sobre como usar GetMessageExtraInfo para distinguir entre a entrada do mouse e a entrada do Windows Touch, consulte Solução de problemas de aplicativos.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows 2000 Server [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho ole2.h
Biblioteca Ole32.lib
DLL Ole32.dll

Confira também

IDropSource