2009-12-08 5 views
2

Si vous utilisez COleDataSource & COleDataObject, vous allouez de la mémoire globale pour chaque format de données de presse-papiers dans lequel vous souhaitez stocker des données dans l'opération drag'n'drop. Dans le code de dépôt, vous interrogez si l'objet a des données dans le (s) format (s) souhaité (s) et pouvez ensuite accéder à cette mémoire en &. Mais en tant que cible de dépôt, vous ne pouvez pas connaître tous les formats pouvant contenir des données associées à la source de traînée. Alors, comment pouvez-vous effacer toute la mémoire allouée pour le glisser pour chaque format?MFC/OLE - Glisser & déposer - Mémoire allouée globalement

En fait, suis-je supposé pour libérer manuellement ces données sur le dépôt, ou laisser MFC/Ole le faire automatiquement?

Répondre

2

Une fois que vous passez le handle à COleDataSource, il possède la mémoire, pas vous. Vous n'avez pas besoin de libérer la mémoire globale. Vous devez énumérer les formats de données disponibles dans l'objet COleDataObject en utilisant BeginEnumFormats et GetNextFormat jusqu'à ce que vous en trouviez un qui vous intéresse. Par exemple, si vous comprenez CF_HTML, vous n'avez pas besoin de gérer CF_UNICODETEXT ou CF_TEXT à moins que le L'utilisateur vous a demandé de rejeter le formatage HTML et de ne faire que copier/coller un texte.