Sdílet prostřednictvím


Datové objekty a zdroje dat: Manipulace

Po vytvoření datového objektu nebo zdroje dat můžete s daty provádět řadu běžných operací, jako je vložení a odebrání dat, výčet formátů, ve které jsou data, a další. Tento článek popisuje techniky potřebné k dokončení nejběžnějších operací. Témata:

Vložení dat do zdroje dat

Způsob vložení dat do zdroje dat závisí na tom, jestli se data zadává okamžitě nebo na vyžádání a ve kterém médiu se zadává. Možnosti jsou následující.

Okamžité poskytování dat (okamžité vykreslování)

  • Opakované volání COleDataSource::CacheGlobalData pro každý formát schránky, ve kterém zadáváte data. Předejte formát schránky, který se má použít, popisovač do paměti obsahující data a volitelně i strukturu FORMATETC popisující data.

    nebo

  • Pokud chcete pracovat přímo se strukturami STGMEDIUM, místo výše uvedené možnosti voláte COleDataSource::CacheGlobalData COleDataSource::CacheData.

Poskytování dat na vyžádání (zpožděné vykreslování)

Toto je rozšířené téma.

  • Opakované volání COleDataSource::DelayRenderData pro každý formát schránky, ve kterém zadáváte data. Předejte formát schránky, který se má použít, a volitelně i strukturu FORMATETC popisující data. Po vyžádání dat bude rozhraní volat COleDataSource::OnRenderData, což je nutné přepsat.

    nebo

  • Pokud k zadání dat použijete CFile objekt, místo COleDataSource::DelayRenderData v předchozí možnosti volejteCOleDataSource::DelayRenderFileData. Po vyžádání dat bude rozhraní volat COleDataSource::OnRenderFileData, což je nutné přepsat.

Určení formátů dostupných v datovém objektu

Než aplikace umožní uživateli vložit data do ní, musí vědět, jestli jsou ve schránce formáty, které dokáže zpracovat. K tomu by vaše aplikace měla provést následující:

  1. Vytvořte COleDataObject objekt a strukturu FORMATETC .

  2. Voláním členské funkce datového AttachClipboard objektu přidružíte datový objekt k datům ve schránce.

  3. Proveďte některou z následujících akcí:

    • Pokud potřebujete jenom jeden nebo dva formáty, volejte členskou funkci datového IsDataAvailable objektu. Ušetříte tak čas v případech, kdy data ve schránce podporují výrazně více formátů než vaše aplikace.

      nebo

    • Voláním členské funkce datového BeginEnumFormats objektu zahájíte výčet formátů dostupných ve schránce. Potom zavolejte GetNextFormat , dokud schránka nevrátí formát, který vaše aplikace podporuje nebo neexistují žádné další formáty.

Pokud používáte ON_UPDATE_COMMAND_UI, můžete teď povolit možnost Vložit a případně vložit speciální položky v nabídce Upravit. Chcete-li to provést, zavolejte buď CMenu::EnableMenuItem nebo CCmdUI::Enable. Další informace o tom, co mají aplikace typu kontejner dělat s položkami nabídky a kdy, najdete v tématu Nabídky a prostředky: Doplňky kontejnerů.

Načítání dat z datového objektu

Jakmile se rozhodnete o datovém formátu, vše, co zbývá, je načíst data z datového objektu. Za tímto účelem se uživatel rozhodne, kam se mají data umístit, a aplikace zavolá příslušnou funkci. Data budou k dispozici v jednom z následujících médií:

Medium Funkce, která se má volat
Globální paměť (HGLOBAL) COleDataObject::GetGlobalData
Soubor (CFile) COleDataObject::GetFileData
STGMEDIUM – struktura (IStorage) COleDataObject::GetData

Médium se obvykle zadává spolu s formátem schránky. Například objekt CF_EMBEDDEDSTRUCT je vždy ve IStorage médiu, které vyžaduje strukturu STGMEDIUM . Proto byste použili GetData , protože je to jediná z těchto funkcí, která může přijmout strukturu STGMEDIUM .

V případech, kdy je formát schránky ve formátu IStream nebo HGLOBAL médiu, může architektura poskytnout CFile ukazatel, který odkazuje na data. Aplikace pak může pomocí čtení souboru získat data stejným způsobem, jako by mohla importovat data ze souboru. V podstatě se jedná o rozhraní OnRenderData na straně klienta a OnRenderFileData rutiny ve zdroji dat.

Uživatel teď může do dokumentu vkládat data stejně jako pro všechna ostatní data ve stejném formátu.

O čem chcete vědět víc

Viz také

Datové objekty a zdroje dat (OLE)
COleDataObject – třída
COleDataSource – třída