Dela via


Dataobjekt och datakällor: Manipulering

När ett dataobjekt eller en datakälla har skapats kan du utföra ett antal vanliga åtgärder på data, till exempel att infoga och ta bort data, räkna upp de format som data finns i med mera. Den här artikeln beskriver de tekniker som krävs för att slutföra de vanligaste åtgärderna. Ämnena omfattar:

Infoga data i en datakälla

Hur data infogas i en datakälla beror på om data tillhandahålls omedelbart eller på begäran och i vilket medium de tillhandahålls. Möjligheterna är följande.

Tillhandahålla data omedelbart (omedelbar återgivning)

  • Anropa COleDataSource::CacheGlobalData upprepade gånger för varje Urklippsformat där du anger data. Skicka urklippsformatet som ska användas, en referens till minnet som innehåller data och, om du vill, en FORMATETC-struktur som beskriver data.

    -eller-

  • Om du vill arbeta direkt med STGMEDIUM-strukturer anropar COleDataSource::CacheData du i stället för COleDataSource::CacheGlobalData i alternativet ovan.

Leverera data på begäran (fördröjd återgivning)

Det här är ett avancerat ämne.

  • Anropa COleDataSource::DelayRenderData upprepade gånger för varje Urklippsformat där du anger data. Skicka urklippsformatet som ska användas och, om du vill, en FORMATC-struktur som beskriver data. När data begärs kommer ramverket att anropa COleDataSource::OnRenderData, vilket du måste åsidosätta.

    -eller-

  • Om du använder ett CFile-objekt för att tillhandahålla data, anropa COleDataSource::DelayRenderFileData i stället för COleDataSource::DelayRenderData i föregående alternativ. När data begärs kommer ramverket att anropa COleDataSource::OnRenderFileData, vilket du måste åsidosätta.

Fastställa vilka format som är tillgängliga i ett dataobjekt

Innan ett program tillåter att användaren klistrar in data i det måste det veta om det finns format på Urklipp som det kan hantera. För att göra detta bör programmet göra följande:

  1. Skapa ett COleDataObject objekt och en FORMATETC-struktur .

  2. Anropa dataobjektets AttachClipboard medlemsfunktion för att associera dataobjektet med data i Urklipp.

  3. Gör något av följande:

    • Anropa dataobjektets IsDataAvailable medlemsfunktion om det bara finns ett eller två format som du behöver. Detta sparar tid i fall där data i Urklipp stöder betydligt fler format än ditt program.

      -eller-

    • Anropa dataobjektets BeginEnumFormats medlemsfunktion för att börja räkna upp de format som är tillgängliga i Urklipp. Anropa GetNextFormat sedan tills Urklipp returnerar ett format som programmet stöder eller så finns det inga fler format.

Om du använder ON_UPDATE_COMMAND_UI kan du nu aktivera Klistra in och eventuellt Klistra in specialobjekt på redigera-menyn. Det gör du genom att anropa antingen CMenu::EnableMenuItem eller CCmdUI::Enable. Mer information om vad containerprogram ska göra med menyalternativ och när finns i Menyer och resurser: Containertillägg.

Hämta data från ett dataobjekt

När du har bestämt dig för ett dataformat är allt som återstår att hämta data från dataobjektet. För att göra detta bestämmer användaren var data ska placeras och programmet anropar lämplig funktion. Data kommer att vara tillgängliga i något av följande medier:

Medel Funktion att ringa
Globalt minne (HGLOBAL) COleDataObject::GetGlobalData
Fil (CFile) COleDataObject::GetFileData
STGMEDIUM-struktur (IStorage) COleDataObject::GetData

Vanligtvis anges mediet tillsammans med urklippsformatet. Till exempel är ett CF_EMBEDDEDSTRUCT objekt alltid i ett IStorage medium som kräver en STGMEDIUM-struktur . Därför skulle du använda GetData eftersom det är den enda av dessa funktioner som kan acceptera en STGMEDIUM-struktur .

För fall där Urklippsformatet är i ett IStream eller HGLOBAL medium kan ramverket ge en CFile pekare som refererar till datan. Programmet kan sedan använda filläsning för att hämta data på ungefär samma sätt som det kan importera data från en fil. Det här är i princip gränssnittet på klientsidan för OnRenderData rutinerna och OnRenderFileData i datakällan.

Användaren kan nu infoga data i dokumentet precis som för andra data i samma format.

Vad vill du veta mer om?

Se även

Dataobjekt och datakällor (OLE)
COleDataObject-klass
COleDataSource-klass