Partager via


Interfaces de transfert de données

L’interface IDataObject fournit aux consommateurs de données des méthodes permettant d’obtenir et de définir les données d’un objet, de déterminer les formats pris en charge par l’objet et d’inscrire et de recevoir des notifications lorsque les données de l’objet changent. Lors de l’obtention de données, un appelant peut spécifier le format dans lequel il souhaite afficher les données. Toutefois, la source des données détermine le support de stockage qu’elle retourne dans un paramètre out fourni par l’appelant.

Par lui-même, IDataObject fournit tous les outils dont vous avez besoin pour implémenter des transferts de presse-papiers Windows ou des transferts de documents composés dans vos applications. Si vous souhaitez également prendre en charge les transferts par glisser-déplacer, vous devez implémenter les interfaces IDropSource et IDropTarget avec IDataObject.

L’interface IDataObject combinée avec les API du Presse-papiers OLE fournit toutes les fonctionnalités des API du Presse-papiers Windows. Il n’est généralement pas nécessaire d’utiliser les deux API du Presse-papiers. Les fournisseurs de données qui prennent en charge les transferts par glisser-déplacer ou les documents composés OLE doivent implémenter l’interface IDataObject . Si votre application prend actuellement en charge uniquement les transferts du Presse-papiers, mais que vous avez l’intention d’ajouter des documents par glisser-déplacer ou des documents composés dans les versions ultérieures, vous souhaiterez peut-être implémenter IDataObject et les API du Presse-papiers OLE dès maintenant afin de réduire le temps consacré au recodage et au débogage ultérieurement. Vous pouvez également implémenter IDataObject pour utiliser des supports de transfert autres que la mémoire globale.

Le tableau suivant récapitule ceux à utiliser, en fonction des types de transfert de données que vous souhaitez prendre en charge :

Pour prendre en charge Utilisation
Documents composés
Idataobject
Glisser-déplacer des transferts
IDataObject, IDropSource, IDropTarget, DoDragDrop (ou l’équivalent)
Transferts du Presse-papiers utilisant exclusivement la mémoire globale
API du Presse-papiers
Transferts du Presse-papiers à l’aide de supports d’échange autres que la mémoire globale.
Idataobject
Transferts du Presse-papiers maintenant, mais glisser-déplacer ou des documents composés ultérieurement
IDataObject et les interfaces et la fonction répertoriées ci-dessus pour « Glisser-déplacer des transferts »

Lorsqu’un utilisateur lance une opération de transfert de données, l’application source crée une instance d’IDataObject et rend les données disponibles dans un ou plusieurs formats. Dans un transfert dans le Presse-papiers, l’application appelle la fonction OleSetClipboard pour passer un pointeur d’objet de données à OLE. (OleSetClipboard offre également des formats de données standard du Presse-papiers pour les applications OLE version 1 et non-OLE.) Dans un transfert glisser-déplacer, l’application appelle la fonction DoDragDrop à la place.

Du côté réception du transfert, la destination reçoit le pointeur IDataObject en tant qu’argument vers un appel de IDropTarget::D rop ou en appelant la fonction OleSetClipboard , selon que le transfert se fait par glisser-déplacer ou par le Presse-papiers. Après avoir obtenu ce pointeur, la destination appelle IDataObject::EnumFormatEtc pour savoir quels formats sont disponibles pour la récupération et sur quels types de média ils peuvent être obtenus. Armée de ces informations, l’application de réception demande les données avec un appel à IDataObject::GetData.

Transfert de données