Objets de données et sources de données : manipulation

Une fois qu’un objet de données ou une source de données a été créé, vous pouvez effectuer plusieurs opérations courantes sur les données, telles que l’insertion et la suppression de données, l’énumération des formats dans utilisant les données, etc. Cet article décrit les techniques nécessaires pour effectuer les opérations les plus courantes. Les sujets abordés sont les suivants :

Insertion de données dans une source de données

La façon dont les données sont insérées dans une source de données varie selon que les données sont fournies immédiatement ou à la demande, et dans quel support elles sont fournies. Les possibilités sont les suivantes.

Fourniture de données immédiatement (rendu immédiat)

  • Appelez COleDataSource::CacheGlobalData à plusieurs reprises chaque format presse-papiers dans lequel vous fournissez des données. Transmettez le format Presse-papiers à utiliser, un handle à la mémoire contenant les données et, éventuellement, une structure FORMATETC décrivant les données.

    -ou-

  • Si vous souhaitez travailler directement avec des structures STGMEDIUM , vous appelez COleDataSource::CacheData plutôt COleDataSource::CacheGlobalData que dans l’option ci-dessus.

Fourniture de données à la demande (rendu différé)

Il s’agit d’une rubrique avancée.

  • Appelez COleDataSource::DelayRenderData à plusieurs reprises chaque format presse-papiers dans lequel vous fournissez des données. Transmettez le format Presse-papiers à utiliser et, éventuellement, une structure FORMATETC décrivant les données. Lorsque les données sont demandées, l’infrastructure appelle COleDataSource::OnRenderData, que vous devez remplacer.

    -ou-

  • Si vous utilisez un CFile objet pour fournir les données, appelez COleDataSource::DelayRenderFileData plutôt que COleDataSource::DelayRenderData dans l’option précédente. Lorsque les données sont demandées, l’infrastructure appelle COleDataSource::OnRenderFileData, que vous devez remplacer.

Détermination des formats disponibles dans un objet de données

Avant qu’une application permette à l’utilisateur de coller des données, il doit savoir s’il existe des formats dans le Presse-papiers qu’il peut gérer. Pour ce faire, votre application doit effectuer les opérations suivantes :

  1. Créez un COleDataObject objet et une structure FORMATETC .

  2. Appelez la fonction membre de l’objet AttachClipboard de données pour associer l’objet de données aux données du Presse-papiers.

  3. Effectuez l’une des opérations suivantes :

    • Appelez la fonction membre de l’objet de IsDataAvailable données s’il n’existe qu’un ou deux formats dont vous avez besoin. Cela vous permet de gagner du temps dans les cas où les données du Presse-papiers prennent en charge beaucoup plus de formats que votre application.

      -ou-

    • Appelez la fonction membre de l’objet de BeginEnumFormats données pour commencer à énumérer les formats disponibles dans le Presse-papiers. Appelez GetNextFormat ensuite jusqu’à ce que le Presse-papiers retourne un format pris en charge par votre application ou qu’il n’y a plus de formats.

Si vous utilisez ON_UPDATE_COMMAND_UI, vous pouvez désormais activer le collage et, éventuellement, coller des éléments spéciaux dans le menu Modifier. Pour ce faire, appelez ou CMenu::EnableMenuItem CCmdUI::Enable. Pour plus d’informations sur les applications conteneur à faire avec les éléments de menu et quand, consultez Menus et Ressources : Ajouts de conteneurs.

Récupération de données à partir d’un objet de données

Une fois que vous avez choisi un format de données, tout ce qui reste consiste à récupérer les données de l’objet de données. Pour ce faire, l’utilisateur décide où placer les données, et l’application appelle la fonction appropriée. Les données seront disponibles dans l’un des supports suivants :

Moyenne Fonction à appeler
Mémoire globale (HGLOBAL) COleDataObject::GetGlobalData
File (CFile) COleDataObject::GetFileData
STRUCTURE STGMEDIUM (IStorage) COleDataObject::GetData

Généralement, le support est spécifié avec son format presse-papiers. Par exemple, un objet CF_EMo EDDEDSTRUCT est toujours dans un IStorage support qui nécessite une structure STGMEDIUM. Par conséquent, vous utiliseriez GetData parce qu’il s’agit de l’une de ces fonctions qui peuvent accepter une structure STGMEDIUM .

Dans les cas où le format Presse-papiers se trouve dans un IStream ou HGLOBAL un support, l’infrastructure peut fournir un CFile pointeur qui référence les données. L’application peut ensuite utiliser la lecture de fichier pour obtenir les données de la même façon qu’elles peuvent importer des données à partir d’un fichier. Essentiellement, il s’agit de l’interface côté client aux routines et OnRenderFileData aux OnRenderData routines de la source de données.

L’utilisateur peut désormais insérer des données dans le document comme pour toutes les autres données au même format.

Que voulez-vous en savoir plus sur

Voir aussi

Objets de données et sources de données (OLE)
COleDataObject, classe
COleDataSource, classe