Oggetti dati e origini dati: modifica
Dopo aver creato un oggetto dati o un'origine dati, è possibile eseguire una serie di operazioni comuni sui dati, ad esempio l'inserimento e la rimozione di dati, l'enumerazione dei formati in cui si trovano i dati e altro ancora. Questo articolo descrive le tecniche necessarie per completare le operazioni più comuni. Gli argomenti includono:
Inserimento di dati in un'origine dati
Il modo in cui i dati vengono inseriti in un'origine dati dipende dal fatto che i dati vengano forniti immediatamente o su richiesta e in quale supporto viene fornito. Le possibilità sono le seguenti.
Fornitura immediata di dati (rendering immediato)
Chiamare
COleDataSource::CacheGlobalData
ripetutamente per ogni formato degli Appunti in cui si forniscono i dati. Passare il formato degli Appunti da usare, un handle alla memoria contenente i dati e, facoltativamente, una struttura FORMATETC che descrive i dati.-oppure-
Se si desidera lavorare direttamente con le strutture STGMEDIUM , chiamare
COleDataSource::CacheData
invece diCOleDataSource::CacheGlobalData
nell'opzione precedente.
Fornitura di dati su richiesta (rendering ritardato)
Questo è un argomento avanzato.
Chiamare
COleDataSource::DelayRenderData
ripetutamente per ogni formato degli Appunti in cui si forniscono i dati. Passare il formato degli Appunti da utilizzare e, facoltativamente, una struttura FORMATETC che descrive i dati. Quando vengono richiesti i dati, il framework chiameràCOleDataSource::OnRenderData
, che è necessario eseguire l'override.-oppure-
Se si usa un
CFile
oggetto per fornire i dati, chiamareCOleDataSource::DelayRenderFileData
anzichéCOleDataSource::DelayRenderData
nell'opzione precedente. Quando vengono richiesti i dati, il framework chiameràCOleDataSource::OnRenderFileData
, che è necessario eseguire l'override.
Determinazione dei formati disponibili in un oggetto dati
Prima che un'applicazione consenta all'utente di incollare i dati, deve sapere se negli Appunti sono presenti formati che possono essere gestiti. A tale scopo, l'applicazione deve eseguire le operazioni seguenti:
Creare un
COleDataObject
oggetto e una struttura FORMATETC .Chiamare la funzione membro dell'oggetto
AttachClipboard
dati per associare l'oggetto dati ai dati negli Appunti.Eseguire una delle operazioni seguenti:
Chiamare la funzione membro dell'oggetto
IsDataAvailable
dati se sono necessari solo uno o due formati. Ciò consente di risparmiare tempo nei casi in cui i dati negli Appunti supportano formati notevolmente maggiori rispetto all'applicazione.-oppure-
Chiamare la funzione membro dell'oggetto
BeginEnumFormats
dati per iniziare a enumerare i formati disponibili negli Appunti. ChiamareGetNextFormat
quindi finché gli Appunti non restituiscono un formato supportato dall'applicazione o non sono disponibili altri formati.
Se si usa ON_UPDATE_COMMAND_UI, è ora possibile abilitare incolla e, possibilmente, incolla voci speciali nel menu Modifica. A tale scopo, chiamare CMenu::EnableMenuItem
o CCmdUI::Enable
. Per altre informazioni sulle applicazioni contenitore da eseguire con le voci di menu e quando, vedere Menu e risorse: Aggiunte contenitori.
Recupero di dati da un oggetto dati
Dopo aver deciso un formato dati, tutto ciò che rimane consiste nel recuperare i dati dall'oggetto dati. A tale scopo, l'utente decide dove inserire i dati e l'applicazione chiama la funzione appropriata. I dati saranno disponibili in uno dei supporti seguenti:
Medio | Funzione da chiamare |
---|---|
Memoria globale (HGLOBAL ) |
COleDataObject::GetGlobalData |
File (CFile ) |
COleDataObject::GetFileData |
Struttura STGMEDIUM (IStorage ) |
COleDataObject::GetData |
In genere, il supporto verrà specificato insieme al formato Degli Appunti. Ad esempio, un oggetto CF_EMBEDDEDSTRUCT è sempre in un IStorage
supporto che richiede una struttura STGMEDIUM . Pertanto, si userebbe GetData
perché è l'unica di queste funzioni che può accettare una struttura STGMEDIUM .
Nei casi in cui il formato degli Appunti è in un IStream
oggetto o HGLOBAL
medio, il framework può fornire un CFile
puntatore che faccia riferimento ai dati. L'applicazione può quindi usare la lettura file per ottenere i dati in modo analogo a quello che potrebbe importare dati da un file. Essenzialmente, si tratta dell'interfaccia lato client per le OnRenderData
routine e OnRenderFileData
nell'origine dati.
L'utente può ora inserire dati nel documento esattamente come per tutti gli altri dati nello stesso formato.
Cosa vuoi sapere di più su
Vedi anche
Oggetti dati e origini dati (OLE)
Classe COleDataObject
Classe COleDataSource