Datové objekty a zdroje dat: Vytváření a likvidace
Jak je uvedeno v článku objekty Data a datové zdroje OLE (), zdroje dat a datové objekty představují obě strany datových přenosů.Tento článek vysvětluje, kdy je vhodné vytvořit a zničit tyto objekty a zdroje k provádění přenosů dat, včetně:
Vytváření datových objektů
Zničení datové objekty
Vytvoření zdroje dat
Zničení zdroje dat
Vytváření datových objektů
Cílová aplikace používají objekty dat – klienta nebo serveru.Data objektu v cílové aplikaci je jeden konec spojení mezi aplikací zdrojové a cílové aplikace.Data objektu v cílové aplikaci umožňuje přistupovat a pracovat s daty ve zdroji dat.
Existují dva běžných situací, kde je potřeba data objektu.První situace je při přetažení dat do aplikace pomocí přetažení.Druhá situace je, když zvolíte Vložit nebo Vložit jinak z nabídky Úpravy.
V případě přetahování myší není nutné vytvořit datový objekt.Ukazatel na objekt existující data budou předány do OnDrop funkce.Tomuto objektu rozhraní vytvořené jako součást operace a přetažení a bude také zničí ji.Toto není vždy případ při vkládání se provádí jiným způsobem.Další informace naleznete v tématu Zničení dat objektů.
Pokud aplikace provádí vložit nebo vložit speciální operace, měli byste vytvořit COleDataObject objektu a volání jeho AttachClipboard členské funkce.To spojí datový objekt s daty ve schránce.Potom můžete tento objekt dat ve vaší funkci Vložit.
Příklad způsobu provedení naleznete DoPasteItem funkce MAINVIEW.Souboru CPP, jenž je součástí ukázkové knihovny MFC OLE OCLIENT.Funkce, která provádí veškeré operace vkládání a volání implementuje OCLIENT DoPasteItem z jeho OnDrop, OnPaste, a OnPasteLink funkce.Vzhledem k tomu, OnDrop má ukazatel na datový objekt předán, předává ukazatel na DoPasteItem.OnPastea OnPasteLink předat NULL pro tento parametr, o tom DoPasteItem datový objekt vytvořit a připojit ji do schránky.Toto schéma odděluje vložit kód, je třeba ladit na jednom místě, takže stále můžete pro oba typy operace vkládání.
Zničení datové objekty
Pokud budete postupovat podle schéma popsané v Vytváření datové objekty, zničení dat objektů je triviální aspekt datové přenosy.Datový objekt, který byl vytvořen v Vložit funkci budou zničeny MFC při vrátí funkce Vložit funkci.
Pokud budete postupovat podle jiný způsob zpracování operace vkládání, zkontrolujte, zda že objekt dat zničen po dokončení operace vložení.Dokud nebude zničen objekt dat, nebude možné pro libovolnou aplikaci úspěšně kopírování dat do schránky.
Vytvoření zdroje dat
Zdroje dat jsou používány zdroji přenosu dat, který může být přenos dat na straně serveru nebo klienta.Zdroj dat ve zdrojové aplikaci je jeden konec spojení mezi aplikací zdrojové a cílové aplikace.Data objektu v cílové aplikaci slouží k interakci s daty v datovém zdroji.
Zdroje dat jsou vytvářeny, pokud aplikace potřebuje ke kopírování dat do schránky.Obvyklý scénář pracuje následujícím způsobem:
Uživatel vybere některá data.
Uživatel zvolí kopie (nebo Vyjmout) z Upravit nabídky nebo zahájením operace a přetažení.
V závislosti na návrhu aplikace, aplikace vytvoří buď COleDataSource nebo objektu z třídy odvozené z COleDataSource.
Vybraná data vložena do zdroje dat voláním jedné z funkcí v COleDataSource::CacheData nebo COleDataSource::DelayRenderData skupiny.
Volání aplikace SetClipboard členské funkce (nebo DoDragDrop členské funkce, pokud se jedná o operaci a přetažení) patřící do objektu vytvořeného v kroku 3.
Pokud se jedná Vyjmout operace nebo DoDragDrop vrátí DROPEFFECT_MOVE, z dokumentu budou odstraněna data vybraného v kroku 1.
V tomto scénáři je implementováno pomocí vzorků MFC OLE OCLIENT a HIERSVR.Podívejte se na zdroje pro každou aplikaci CView-odvozené třídy pro všechny ale na GetClipboardData a OnGetClipboardData funkce.Tyto dvě funkce jsou buď COleClientItem nebo COleServerItem-implementace třídy odvozené.Tyto ukázkové programy poskytují vhodný příklad jak implementovat tyto koncepty.
Jedna situace ve kterém můžete vytvořit COleDataSource Chcete-li změnit výchozí chování a přetažení operace dojde k objektu.Další informace naleznete přetažení: přizpůsobení článku.
Zničení zdroje dat
Zdroje dat musí být zničeny aplikací právě za ně odpovědné.V situacích, kdy rukou zdroj dat OLE, jako je například volání COleDataSource::DoDragDrop, je třeba volat pDataSrc ->InternalRelease.Příklad:
void CMyListView::OnLvnBegindrag(NMHDR *pNMHDR, LRESULT *pResult)
{
UNREFERENCED_PARAMETER(pResult);
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
CMyDataSource* pDataSrc = new CMyDataSource();
if (NULL != pDataSrc)
{
pDataSrc->Initialize(pNMLV, this);
pDataSrc->DelayRenderData(
(CLIPFORMAT)RegisterClipboardFormat(_T("TIGroupFiles")));
pDataSrc->DoDragDrop();
pDataSrc->InternalRelease();
}
}
Pokud váš zdroj dat nebyla předána OLE, pak jste odpovědní za zničení, stejně jako všechny typické objekt jazyka C++.
Další informace naleznete v tématu přetažení, schránky, a manipulaci s objekty Data a zdroje dat.