Compartilhar via


Arrastar e soltar OLE

O recurso de arrastar e soltar do OLE é principalmente um atalho para copiar e colar dados. Quando você usa a Área de Transferência para copiar ou colar dados, várias etapas são necessárias. Selecione os dados e escolha Recortar ou Copiar no menu Editar . Em seguida, você move para o aplicativo ou janela de destino e coloca o cursor no local de destino. Por fim, você escolhe Editar>Colar no menu.

O recurso de arrastar e soltar OLE é diferente do mecanismo de arrastar e soltar do Gerenciador de Arquivos. O Gerenciador de Arquivos só pode manipular nomes de arquivo e foi projetado especificamente para passar nomes de arquivo para aplicativos. Arrastar e soltar em OLE é muito mais geral. Ele permite arrastar e soltar todos os dados que também podem ser colocados na Área de Transferência.

Ao usar o OLE arrastar e soltar, você remove duas etapas do processo. Selecione os dados na janela de origem (a "origem de soltar" e arraste-os para o destino (o "destino suspenso"). Solte-o liberando o botão do mouse. A operação elimina a necessidade de menus e é mais rápida do que a sequência de copiar/colar. Há apenas um requisito: a origem da queda e o destino de soltar devem estar abertos e, pelo menos, parcialmente visíveis na tela.

Usando o arrastar e soltar OLE, os dados podem ser transferidos facilmente de um local para outro: dentro de um documento, entre documentos diferentes ou entre aplicativos. Ele pode ser implementado em um contêiner ou em um aplicativo de servidor. Qualquer aplicativo pode ser uma origem suspensa, um destino suspenso ou ambos. Se um aplicativo implementar o suporte de drop-source e drop-target, você poderá arrastar e soltar entre janelas filho ou dentro de uma janela. Esse recurso torna seu aplicativo muito mais fácil de usar.

Os artigos OLE (objetos de dados e fontes de dados) explicam como implementar a transferência de dados em seus aplicativos. Também é útil examinar os exemplos OCLIENT e HIERSVR do OLE do MFC.

Implementar uma fonte de descarte

Para fazer com que seu aplicativo forneça dados para uma operação de arrastar e soltar, implemente uma fonte suspensa. A implementação básica de uma fonte suspensa é relativamente simples. A primeira etapa é determinar quais eventos iniciam uma operação de arrastar. As diretrizes de interface do usuário recomendadas definem o início de uma operação de arrastar como quando um evento de WM_LBUTTONDOWN ocorre em um ponto dentro de alguns dados selecionados. Os exemplos OCLIENT e HIERSVR do OLE do MFC seguem estas diretrizes.

Se o aplicativo for um contêiner e os dados selecionados forem vinculados ou um objeto inserido do tipo COleClientItem, chame sua DoDragDrop função de membro. Caso contrário, construa um COleDataSource objeto, inicialize-o com a seleção e chame a função de membro do objeto da fonte de DoDragDrop dados. Se seu aplicativo for um servidor, use COleServerItem::DoDragDrop. Para obter informações sobre como personalizar o comportamento padrão de arrastar e soltar, consulte a seção Personalizar arrastar e soltar.

Se DoDragDrop retornar DROPEFFECT_MOVE, exclua os dados de origem do documento de origem imediatamente. Nenhum outro valor retornado tem DoDragDrop qualquer efeito em uma fonte de descarte.

Para obter mais informações, consulte objetos de dados OLE e fontes de dados: Criação e destruição e objetos de dados OLE e fontes de dados: Manipulação.

Implementar um destino de descarte

É preciso um pouco mais de trabalho para implementar um destino suspenso do que uma fonte suspensa, mas ainda é relativamente simples.

Para implementar um destino de descarte OLE

  1. Se ainda não estiver lá, adicione uma chamada à AfxOleInit função de membro do InitInstance aplicativo. Essa chamada é necessária para inicializar as bibliotecas OLE.

  2. Adicione uma variável de membro a cada exibição no aplicativo que você deseja ser um destino suspenso. Essa variável de membro deve ser do tipo COleDropTarget ou de uma classe derivada dela.

  3. Na função da classe de exibição que manipula a mensagem de WM_CREATE (normalmente OnCreate), chame a função membro da Register nova variável membro. Revoke será chamado automaticamente para você quando sua exibição for destruída.

  4. Substitua as funções a seguir. Se você quiser o mesmo comportamento em todo o aplicativo, substitua essas funções em sua classe de exibição. Se você quiser modificar o comportamento em casos isolados ou quiser habilitar o descarte em nãoCView janelas, substitua essas funções em sua COleDropTargetclasse derivada.

    Sobrescrever Para permitir
    OnDragEnter Solte as operações que ocorrerão na janela. Chamado quando o cursor entra pela primeira vez na janela.
    OnDragLeave Comportamento especial quando a operação de arrastar sai da janela especificada.
    OnDragOver Solte as operações que ocorrerão na janela. Chamado quando o cursor está sendo arrastado pela janela.
    OnDrop Manipulação de dados que estão sendo descartados na janela especificada.
    OnScrollBy Comportamento especial para quando a rolagem é necessária na janela de destino.

Consulte o MAINVIEW. Arquivo CPP que faz parte do OCLIENT de exemplo OLE do MFC para obter um exemplo de como essas funções funcionam juntas.

Para obter mais informações, consulte objetos de dados OLE e fontes de dados: Criação e destruição e objetos de dados OLE e fontes de dados: Manipulação.

Personalizar arrastar e soltar

A implementação padrão do recurso de arrastar e soltar é suficiente para a maioria dos aplicativos. No entanto, alguns aplicativos podem exigir que você altere esse comportamento padrão. Esta seção explica as etapas necessárias para alterar esses padrões. Você pode usar essa técnica para tornar aplicativos que não dão suporte a documentos compostos em fontes suspensas.

Se você estiver personalizando o comportamento padrão de arrastar e soltar OLE ou tiver um aplicativo não OLE, deverá criar um COleDataSource objeto para conter os dados. Quando o usuário inicia uma operação de arrastar e soltar, seu código deve chamar a DoDragDrop função desse objeto em vez de de outras classes que dão suporte a operações de arrastar e soltar.

Opcionalmente, você pode criar um COleDropSource objeto para controlar a queda e substituir algumas de suas funções dependendo do tipo de comportamento que você deseja alterar. Esse objeto de origem suspensa é passado para COleDataSource::DoDragDrop alterar o comportamento padrão dessas funções. Essas opções diferentes permitem muita flexibilidade na forma como você dá suporte a operações de arrastar e soltar em seu aplicativo. Para obter mais informações sobre fontes de dados, consulte o artigo Objetos de Dados e Fontes de Dados (OLE).

Você pode substituir as seguintes funções para personalizar operações de arrastar e soltar:

Sobrescrever Para personalizar
OnBeginDrag Como a operação de arrastar começa depois que você chama DoDragDrop.
GiveFeedback Comentários visuais, como a aparência do cursor, para diferentes resultados de descarte.
QueryContinueDrag O encerramento de uma operação de arrastar e soltar. Essa função permite que você verifique os estados de chave modificador durante a operação de arrastar.

Consulte também

OLE
Objetos de dados OLE e fontes de dados
Objetos de dados OLE e fontes de dados: Criação e destruição
Objetos de dados OLE e fontes de dados: Manipulação
COleClientItem::D oDragDrop
Classe COleDataSource
COleDataSource::D oDragDrop
Classe COleDropSource
Classe COleDropTarget
CView::OnDragLeave