objets de données et sources de données : manipulation
Après qu'un objet de données ou qu'une source de données a été créé, vous pouvez effectuer plusieurs opérations courantes sur les données, telle que l'insertion et la suppression de données, l'énumération des formats dans lequelles se trouvent les données , et plus. Cet article décrit les techniques nécessaires pour effectuer les opérations les plus courantes. Les rubriques traitées ici sont les suivantes :
Insertion de données dans une source de données
Détermination des formats disponibles dans un objet de données
Récupération des données d'un objet de données
Insertion de données dans une source de données
La manière dont les données sont insérées dans une source de données varie selon que les données sont disponibles immédiatement ou à la demande, et du support dans lequel elles sont fournies. Les possibilités sont les suivantes.
Fournir des données immédiatement (rendu immédiat)
Appelez COleDataSource::CacheGlobalData à plusieurs reprises pour chaque format du presse-papiers dans lequel vous fournissez des données. Passez le format du presse-papiers à utiliser, un descripteur de la mémoire contenant des données et, éventuellement, une structure de FORMATETC décrivant les données.
ou
Si vous souhaitez utiliser directement des structures STGMEDIUM, vous appelez COleDataSource::CacheData au lieu de COleDataSource::CacheGlobalData dans l'option ci-dessus.
Fournir des données à la demande (rendu différé)
Ceci est une rubrique avancée.
Appelez COleDataSource::DelayRenderData à plusieurs reprises pour chaque format du presse-papiers dans lequel vous fournissez des données. Passez le format du presse-papiers à utiliser et, éventuellement, une structure FORMATETC décrivant les données. Lorsque des données sont demandées, l'infrastructure appelle COleDataSource::OnRenderData, que vous devez remplacer.
ou
Si vous utilisez un objet CFile pour fournir l'entrée, appelez COleDataSource::DelayRenderFileData au lieu de COleDataSource::DelayRenderData dans l'option précédente. Lorsque des 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 autorise l'utilisateur à coller des données dans ce mode, elle doit savoir s'il existe des formats dans le presse-papiers qu'elle peut traiter. Pour ce faire, l'application doit effectuer les opérations suivantes :
Créez un objet COleDataObject et une structure FORMATETC.
Appelez la fonction membre AttachClipboard de l'objet de données pour associer l'objet de données avec les données dans le presse-papiers.
Effectuez l'une des actions suivantes :
Appelez la fonction membre IsDataAvailable de l'objet de données s'il n'existe qu'un ou deux formats dont vous avez besoin. Cela vous fera gagner du temps dans les cas où les données dans le presse-papiers prennent en charge beaucoup plus de formats que votre application.
ou
Appelez la fonction membre BeginEnumFormats de données pour démarrer l'énumération des formats disponibles dans le presse-papiers. Appelez ensuite GetNextFormat jusqu'à ce que le presse-papiers retourne un format que votre application prend en charge ou il n'y a plus de formats.
Si vous utilisez ON_UPDATE_COMMAND_UI, vous pouvez maintenant activer les éléments de collage, et éventuellement de collage spécial dans le menu Edition. Pour cela, appelez CMenu::EnableMenuItem ou CCmdUI::Enable. Pour plus d'informations sur ce que les applications conteneur doivent faire avec les éléments de menu et quand, consultez Menus et de ressources : Ajouts de conteneur.
Récupération des données d'un objet de données
Une fois que vous avez décidé d'un format de données, tout ce qui reste à faire est d'extraire les données de l'objet de données. Pour ce faire, l'utilisateur choisit où placer les données, et l'application appelle la fonction appropriée. Les données sont disponibles dans l'un des supports suivants :
Moyenne |
Fonction à appeler |
---|---|
mémoire globale (HGLOBAL) |
COleDataObject::GetGlobalData |
Fichier (CFile) |
COleDataObject::GetFileData |
Structure STGMEDIUM (IStorage) |
COleDataObject::GetData |
En général, le support est spécifié avec son format de presse-papiers. Par exemple, un objet CF_EMBEDDEDSTRUCT est toujours dans un support IStorage qui requiert une structure STGMEDIUM. Par conséquent, vous devez utiliser GetData car c'est le seul de ces fonctions qui acceptent une structure STGMEDIUM.
Dans les cas où le format du presse-papiers est dans un support IStream ou HGLOBAL, l'infrastructure peut fournir un pointeur CFile qui référence les données. L'application peut utiliser ensuite la lecture du fichier pour obtenir les données de la même façon qu'elle peut importer des données à partir d'un fichier. Fondamentalement, il s'agit de l'interface cliente pour les routines OnRenderData et OnRenderFileData dans la source de données.
L'utilisateur peut ainsi insérer des données dans le document comme pour toutes les autres données dans le même format.