Compartilhar via


Interfaces de transferência de dados

A interface IDataObject fornece aos consumidores de dados métodos para obter e definir os dados de um objeto, determinar quais formatos o objeto oferece suporte e registrar e receber notificações quando os dados no objeto são alterados. Ao obter dados, um chamador pode especificar o formato no qual deseja renderizar os dados. A origem dos dados, no entanto, determina a mídia de armazenamento, que retorna em um parâmetro out fornecido pelo chamador.

Por si só, IDataObject fornece todas as ferramentas que você precisa para implementar transferências da área de transferência do Windows ou transferências de documentos compostos em seus aplicativos. Se você também quiser oferecer suporte a transferências de arrastar e soltar, será necessário implementar as interfaces IDropSource e IDropTarget junto com IDataObject.

A interface IDataObject combinada com APIs da área de transferência OLE fornecem todos os recursos das APIs da área de transferência do Windows. Geralmente, não é necessário usar ambas as APIs da área de transferência. Os fornecedores de dados que oferecem suporte a transferências de arrastar e soltar ou documentos compostos OLE devem implementar a interface IDataObject . Se seu aplicativo oferece suporte apenas a transferências da área de transferência agora, mas você pretende adicionar arrastar e soltar ou documentos compostos em versões posteriores, convém implementar IDataObject e as APIs da área de transferência OLE agora para minimizar a quantidade de tempo gasto recodificando e depurando mais tarde. Você também pode querer implementar IDataObject para utilizar mídia de transferência diferente da memória global.

A tabela a seguir resume quais usar, dependendo dos tipos de transferência de dados que você deseja suportar:

Para dar suporte a… Uso
Documentos compostos
IDataObject
Arrastar e soltar transferências
IDataObject, IDropSource, IDropTarget, DoDragDrop (ou equivalente)
Transferências da área de transferência usando exclusivamente memória global
API da área de transferência
Transferências da área de transferência usando meios de troca diferentes da memória global.
IDataObject
A área de transferência transfere agora, mas arrasta e solta ou compõe documentos mais tarde
IDataObject e as interfaces e funções listadas acima para "Arrastar e soltar transferências"

Quando um usuário inicia uma operação de transferência de dados, o aplicativo de origem cria uma instância de IDataObject e, por meio dela, disponibiliza os dados em um ou mais formatos. Em uma transferência da área de transferência, o aplicativo chama a função OleSetClipboard para passar um ponteiro de objeto de dados para OLE. (OleSetClipboard também oferece formatos de dados padrão da área de transferência para aplicativos OLE versão 1 e não-OLE.) Em uma transferência de arrastar e soltar, o aplicativo chama a função DoDragDrop.

No lado de recebimento da transferência, o destino recebe o ponteiro IDataObject como um argumento para uma invocação de IDropTarget::D rop ou chamando a função OleSetClipboard, dependendo se a transferência é por meio de arrastar e soltar ou a área de transferência. Tendo obtido esse ponteiro, o destino chama IDataObject::EnumFormatEtc para saber quais formatos estão disponíveis para recuperação e em que tipos de mídia eles podem ser obtidos. Armado com essas informações, o aplicativo de recebimento solicita os dados com uma chamada para IDataObject::GetData.

Transferência de dados