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í volatCOleDataSource::OnRenderData
, což je nutné přepsat.nebo
Pokud k zadání dat použijete
CFile
objekt, místoCOleDataSource::DelayRenderData
v předchozí možnosti volejteCOleDataSource::DelayRenderFileData
. Po vyžádání dat bude rozhraní volatCOleDataSource::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í:
Vytvořte
COleDataObject
objekt a strukturu FORMATETC .Voláním členské funkce datového
AttachClipboard
objektu přidružíte datový objekt k datům ve schránce.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 zavolejteGetNextFormat
, 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