Interfaces de transfert de données
L’interfaceIDataObjectfournit 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 de s’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’il 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 les transferts de presse-papiers Windows ou les transferts de documents composés dans vos applications. Si vous souhaitez également prendre en charge les transferts de glisser-déplacer, vous devez implémenter les IDropSource et interfaces IDropTarget avec IDataObject.
L’interface IDataObject combinée avec les API de 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 de glisser-déplacer ou les documents composés OLE doivent implémenter l’interface IDataObject. Si votre application prend uniquement en charge les transferts de Presse-papiers maintenant, mais que vous envisagez d’ajouter des documents glisser-déplacer ou composés dans les versions ultérieures, vous pouvez implémenter IDataObject et les API de Presse-papiers OLE afin de réduire le temps passé au décodage et au débogage ultérieurement. Vous pouvez également implémenter IDataObject afin d’utiliser le média de transfert autre 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 | Utiliser |
---|---|
Documents composés |
IDataObject |
Glisser-déplacer des transferts |
IDataObject , IDropSource, IDropTarget, DoDragDrop (ou équivalent) |
Transferts de Presse-papiers à l’aide exclusivement de la mémoire globale |
API Presse-papiers |
Le Presse-papiers transfère à l’aide de supports d’échange autres que la mémoire globale. |
IDataObject |
Transfert du Presse-papiers maintenant, mais glisser-déplacer ou déposer des documents composés ultérieurement |
IDataObject et les interfaces et la fonction répertoriées ci-dessus pour les « transferts glisser-déplacer » |
Lorsqu’un utilisateur lance une opération de transfert de données, l’application source crée une instance de IDataObject et rend les données disponibles dans un ou plusieurs formats. Dans un transfert de Presse-papiers, l’application appelle la fonctionOleSetClipboardpour passer un pointeur d’objet de données à OLE. (OleSetClipboard offre également des formats de données de Presse-papiers standard pour les applications OLE version 1 et non OLE.) Dans un transfert glisser-déplacer, l’application appelle la fonction DoDragDrop à la place.
Sur le côté de réception du transfert, la destination reçoit le pointeurIDataObject en tant qu’argument vers un appel de IDropTarget ::D rop ou en appelant la fonction OleSetClipboard, selon que le transfert est au moyen de glisser-déplacer ou du Presse-papiers. Après avoir obtenu ce pointeur, les appels de destination IDataObject ::EnumFormatEtc pour savoir quels formats sont disponibles pour la récupération et sur les types de supports qu’ils peuvent obtenir. Avec ces informations, l’application de réception demande les données avec un appel à IDataObject ::GetData.