Partager via


Objets de données et sources de données : Création et la destruction

Comme expliqué dans l'article objets de données et sources de données (OLE), les objets de données et les sources de données représentent les deux côtés d'un transfert de données.Cet article explique quand créer et détruire ces objets et sources pour exécuter vos assignations de données correctement, notamment :

  • Créer des objets de données

  • Objets de données de destruction

  • Créer des sources de données

  • Sources de données de destruction

Créer des objets de données

Les objets de données sont utilisés par l'application de destination — le client ou le serveur.Un objet de données dans l'application de destination est une fin d'une connexion entre l'application source et l'application de destination.Un objet de données dans l'application de destination est utilisé pour accéder et d'interagir avec les données dans la source de données.

Il existe deux situations courantes où un objet de données est nécessaire.La première situation est lorsque les données sont déplacées dans votre application à l'aide de glisser-déplacer.La deuxième situation est lorsque le collage ou l'special de collage est choisi dans le menu Edition.

Dans une situation de glisser-déplacer, vous n'avez pas besoin de créer un objet de données.Un pointeur vers un objet de données existant est passé à la fonction d' OnDrop .Cet objet de données est créé par l'infrastructure dans le cadre de l'opération de glisser-déplacer et est également supprimé par celui-ci.Ce n'est pas toujours le cas lors coller est effectué par une autre méthode.Pour plus d'informations, consultez l' objets de données de destruction.

Si l'application est un collage ou une opération spéciale de collage, vous devez créer un objet de COleDataObject et appeler sa fonction membre d' AttachClipboard .Cela associe l'objet de données avec les données dans le presse-papiers.Vous pouvez ensuite utiliser cet objet de données dans votre fonction de collage.

Pour obtenir un exemple de la façon dont cette opération, consultez la fonction de DoPasteItem dans le fichier de MAINVIEW.CPP qui fait partie de l'exemple de liaison et incorporation d'objets MFC OCLIENT.OCLIENT implémente une fonction qui effectue toutes les opérations de coller et appelle DoPasteItem de son OnDrop, OnPaste, et fonctions d' OnPasteLink .Étant donné qu' OnDrop a un pointeur vers un objet de données qui lui est passé, il passe le pointeur sur DoPasteItem.OnPaste et exécuté NULL d' OnPasteLink pour ce paramètre, indiquant DoPasteItem créer un objet de données et l'attacher au presse-papiers.Cette modèle sépare le code de collage vous devez seulement le débogage dans un emplacement, mais vous pouvez toujours utiliser pour les deux types d'opérations de copier-coller.

Objets de données de destruction

Si vous suivez le modèle décrite dans créer des objets de données, supprimer des objets de données est un aspect trivial les transferts de données.L'objet de données créé dans la fonction de collage est détruit par MFC lorsque votre fonction de collage retourne.

Si vous suivez une autre méthode d'opérations de collage de gestion, assurez -vous que l'objet de données est détruit après l'opération de collage terminée.Tant que l'objet de données soit détruit, il est impossible pour toute application de copier avec succès les données dans le presse-papiers.

Créer des sources de données

Les sources de données qui sont utilisées par la source de transfert de données, qui peut être le client ou le côté serveur du transfert de données.Une source de données dans l'application source est une fin d'une connexion entre l'application source et l'application de destination.Un objet de données dans l'application de destination est utilisée pour interagir avec les données dans la source de données.

Les sources de données sont créées lorsqu'une application doit copier des données dans le presse-papiers.Un scénario typique fonctionne comme suit :

  1. L'utilisateur sélectionne des données.

  2. L'utilisateur choisit Copier (ou Couper) du menu de Edit ou lance une opération de glisser-déplacer.

  3. Selon la conception du programme, l'application crée un objet d' COleDataSource ou un objet d'une classe dérivée d' COleDataSource.

  4. Les données sélectionnée est insérée dans la source de données en appelant l'une des fonctions aux groupes d' COleDataSource::CacheData ou d' COleDataSource::DelayRenderData .

  5. L'application appelle la fonction membre d' SetClipboard (ou la fonction membre d' DoDragDrop s'il s'agit d'une opération de glisser-déplacer) appartenant à l'objet créé à l'étape 3.

  6. S'il s'agit d'une opération de Couper ou DoDragDrop retourne DROPEFFECT_MOVE, les données sélectionnée à l'étape 1 est supprimée du document.

Ce scénario est implémenté par les exemples de liaison et incorporation d'objets MFC OCLIENT et HIERSVR.Examinez la source pour CViewde chaque application classe dérivée pour tout sauf les fonctions d' GetClipboardData et d' OnGetClipboardData .Ces deux fonctions sont dans COleClientItem ou COleServerItem- implémentations de classes dérivées.Ces exemples de programme fournissent un bon exemple d'implémentation ces concepts.

Une autre situation dans laquelle vous pouvez créer un objet d' COleDataSource se produit si vous modifiez le comportement par défaut d'une opération de glisser-déplacer.Pour plus d'informations, consultez l'article de glisser-déplacer : personnaliser .

Sources de données de destruction

Les sources de données doivent être supprimées par l'application actuellement chargé d'eux.Dans les cas où vous remettez la source de données OLE, tel que l'appel COleDataSource::DoDragDrop, vous devez appeler pDataSrc->InternalRelease.Par exemple :

void CMyListView::OnLvnBegindrag(NMHDR *pNMHDR, LRESULT *pResult)
{
   UNREFERENCED_PARAMETER(pResult);

   LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);

   CMyDataSource* pDataSrc = new CMyDataSource();
   if (NULL != pDataSrc)
   {
      pDataSrc->Initialize(pNMLV, this);
      pDataSrc->DelayRenderData(
         (CLIPFORMAT)RegisterClipboardFormat(_T("TIGroupFiles")));
      pDataSrc->DoDragDrop();
      pDataSrc->InternalRelease();
   }
}

Si vous n'avez pas fourni votre source de données OLE, vous êtes chargé de le détruire, comme avec tout objet classique C++.

Pour plus d'informations, consultez glisser-déplacer, presse-papiers, et le Manipuler des objets de données et les sources de données.

Voir aussi

Référence

COleDataObject, classe

COleDataSource, classe

Concepts

Objets de données et sources de données () OLE