Sdílet prostřednictvím


Zdroje dat a datové objekty: vytváření a zničení

Jak bylo vysvětleno v článku objekty Data a datové zdroje (OLE), objekty data a zdroje dat představují obě strany přenos dat.Tento článek vysvětluje, kdy k vytvoření a zničit tyto objekty a zdroje k provádění přenosů dat správně, včetně:

  • Vytvoření datové objekty

  • Zničení datové objekty

  • Vytváření zdrojů dat.

  • Zničení zdroje dat

Vytvoření datové objekty

Cílová aplikace používá objekty dat – klient nebo server.Datový objekt v cílové aplikaci je jeden konec spojení mezi aplikací zdrojové a cílové aplikace.Datový objekt v cílové aplikaci umožňuje přistupovat a pracovat s daty ve zdroji dat.

Existují dvě běžných situací, kde je potřeba data objektu.První situace je při přetažení dat ve vaší aplikaci pomocí přetažení.Druhá situace je při vkládání nebo Vložit jinak se zvolí z nabídky Úpravy.

V situaci a přetažení není nutné vytvořit data objektu.Ukazatel na objekt existující data budou předány do OnDrop funkce.Tento objekt dat rámce vytvořené jako součást operace přetažení myší a bude také zničí ji.Není to případ po vložení jinou metodou.Další informace naleznete v Zničení datové objekty.

Pokud aplikace provádí vložit nebo vložit speciální operaci, vytvořte COleDataObject objektu a volání jeho AttachClipboard členské funkce.Tento datový objekt přidruží data ve schránce.Vložit funkci můžete tato data objektu.

Příklad jak to provést, naleznete DoPasteItem MAINVIEW funkce.CPP souboru, který část vzorku 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 funkcí.Protože OnDrop má ukazatel objektu údaje předané předá ukazatele na DoPasteItem.OnPastea OnPasteLink předat NULL pro tento parametr s informacemi DoPasteItem vytvořit objekt dat a připojit jej do schránky.Toto schéma odděluje kód vložit máte ladění na jednom místě, takže stále můžete pro oba druhy 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 trivial aspekt přenosy dat.Datový objekt, který byl vytvořen v Vložit funkci budou zničeny MFC při vrátí Vložit funkci.

Pokud jiný způsob zpracování operace vkládání řídit, ujistěte se, že datový objekt zničený po dokončení operace vložit.Dokud zničení dat objektu, nebude možné aplikace úspěšně kopírování dat do schránky.

Vytváření zdrojů dat.

Zdroje dat jsou používány zdroj přenosu dat, který může být klientovi nebo přenos dat na straně serveru.Zdroj dat ve zdrojové aplikaci je jeden konec spojení mezi aplikací zdrojové a cílové aplikace.Datový objekt v cílové aplikaci umožňuje pracovat s daty ve zdroji dat.

Zdroje dat jsou vytvořeny při kopírování dat do schránky aplikace potřebuje.Typický scénář pracuje následujícím způsobem:

  1. Uživatel vybere některá data.

  2. Uživatel zvolí kopie (nebo Vyjmout) z Upravit nabídce nebo začátku operace a přetažení.

  3. V závislosti na návrhu programu, aplikace vytvoří buď COleDataSource nebo objektu z třídy odvozené z COleDataSource.

  4. Vybraná data do zdroje dat vložen voláním funkcí v COleDataSource::CacheData nebo COleDataSource::DelayRenderData skupin.

  5. Volání aplikace SetClipboard členské funkce (nebo DoDragDrop členské funkce, pokud je operace a přetažení) patřící objekt vytvořený v kroku 3.

  6. Pokud se jedná Vyjmout operace nebo DoDragDrop vrátí DROPEFFECT_MOVE, z dokumentu odstraněna data vybraného v kroku 1.

V tomto scénáři je implementováno vzorky MFC OLE OCLIENT a HIERSVR.Podívejte se na zdroj pro každou aplikaci CView-odvozené třídy pro všechny, ale na GetClipboardData a OnGetClipboardData funkcí.Tyto dvě funkce jsou buď COleClientItem nebo COleServerItem-odvozené třídy implementace.Tyto ukázkové programy poskytují vhodný Příklad implementace koncepce.

Jeden situace ve kterém můžete vytvořit COleDataSource objektu, dojde-li změnit výchozí chování a přetažení operace.Další informace naleznete přetažení: přizpůsobení článek.

Zničení zdroje dat

Zdroje dat musí být zničeny aplikací aktuálně za ně odpovědné.V situacích, kde OLE na straně zdroje dat, jako je například volání COleDataSource::DoDragDrop, obraťte se na 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 nebude mít zdroj dat předán OLE, pak jste odpovědní za zničení, stejně jako u libovolného objektu typické C++.

Další informace naleznete v přetažení, schránky, a zdroje dat a manipulaci s objekty Data.

Viz také

Referenční dokumentace

Třída COleDataObject

Třída COleDataSource

Koncepty

Objekty data a zdrojů dat (OLE)