Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 effectuer correctement vos transferts de données, notamment :
Création d’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 l’une des extrémités 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 aux données et interagir avec celles de 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 supprimées dans votre application à l’aide du glisser-déplacer. La deuxième situation consiste à choisir coller ou coller spécial dans le menu Modifier.
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é à votre OnDrop fonction. Cet objet de données est créé par l’infrastructure dans le cadre de l’opération de glisser-déplacer et sera également détruit par celui-ci. Ce n’est pas toujours le cas lorsque le collage est effectué par une autre méthode. Pour plus d’informations, consultez Destruction d’objets de données.
Si l’application effectue une opération spéciale de collage ou de collage, vous devez créer un COleDataObject objet et appeler sa AttachClipboard fonction membre. Cela associe l’objet de données aux données du Presse-papiers. Vous pouvez ensuite utiliser cet objet de données dans votre fonction de collage.
Destruction d’objets de données
Si vous suivez le schéma décrit dans Création d’objets de données, la destruction d’objets de données est un aspect trivial des transferts de données. L’objet de données créé dans votre fonction de collage est détruit par MFC lorsque votre fonction de collage retourne.
Si vous suivez une autre méthode de gestion des opérations de collage, vérifiez que l’objet de données est détruit une fois votre opération de collage terminée. Tant que l’objet de données n’est pas détruit, il est impossible pour toute application de copier correctement des données dans le Presse-papiers.
Création de sources de données
Les sources de données sont utilisées par la source du 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 l’une des extrémités 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 interagir avec les données de 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 classique s’exécute comme suit :
L’utilisateur sélectionne certaines données.
L’utilisateur choisit Copier (ou Couper) dans le menu Modifier ou commence une opération de glisser-déplacer.
Selon la conception du programme, l’application crée un
COleDataSourceobjet ou un objet à partir d’une classe dérivée deCOleDataSource.Les données sélectionnées sont insérées dans la source de données en appelant l’une des fonctions dans le
COleDataSource::CacheDataouCOleDataSource::DelayRenderDatales groupes.L’application appelle la
SetClipboardfonction membre (ou laDoDragDropfonction membre s’il s’agit d’une opération de glisser-déplacer) appartenant à l’objet créé à l’étape 3.S’il s’agit d’une opération Couper ou
DoDragDropretourne DROPEFFECT_MOVE, les données sélectionnées à l’étape 1 sont supprimées du document.
Ce scénario est implémenté par les exemples OLE MFC OCLIENT et HIERSVR. Examinez la source de la classe dérivée de CViewchaque application pour toutes, mais les GetClipboardDataOnGetClipboardData fonctions. Ces deux fonctions se trouvent dans les COleClientItem implémentations de classes dérivées ou COleServerItemdérivées. Ces exemples de programmes fournissent un bon exemple de la façon d’implémenter ces concepts.
Une autre situation dans laquelle vous souhaiterez peut-être créer un COleDataSource objet 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 OLE Glisser-déplacer : Personnaliser l’article glisser-déplacer .
Destruction de sources de données
Les sources de données doivent être détruites par l’application actuellement responsable. Dans les situations où vous passez la source de données à OLE, par exemple en appelant COleDataSource ::D oDragDrop, 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 remis votre source de données à OLE, vous êtes responsable de sa destruction, comme avec n’importe quel objet C++ classique.
Pour plus d’informations, consultez Glisser-déplacer, Presse-papiers et manipulation d’objets de données et de sources de données.
Voir aussi
Objets de données et sources de données (OLE)
COleDataObject, classe
COleDataSource, classe