Condividi tramite


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 di COleDataSource::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, chiamare COleDataSource::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:

  1. Creare un COleDataObject oggetto e una struttura FORMATETC .

  2. Chiamare la funzione membro dell'oggetto AttachClipboard dati per associare l'oggetto dati ai dati negli Appunti.

  3. 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. Chiamare GetNextFormat 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