Sdílet prostřednictvím


OLE – přetažení

Funkce přetahování ole je primárně zástupcem pro kopírování a vkládání dat. Pokud ke kopírování nebo vkládání dat používáte schránku, je potřeba provést několik kroků. Vyberte data a v nabídce Upravit zvolte Vyjmout nebo Kopírovat. Pak přejdete do cílové aplikace nebo okna a umístíte kurzor do cílového umístění. Nakonec v nabídce zvolte Upravit>vložení .

Funkce přetahování myší OLE se liší od mechanismu přetažení správce souborů. Správce souborů může zpracovávat pouze názvy souborů a je navržený speciálně pro předávání názvů souborů aplikacím. Přetažení v OLE je mnohem obecnější. Umožňuje přetáhnout všechna data, která by se dala umístit také do schránky.

Když použijete přetahování OLE, odeberete ze procesu dva kroky. Vyberete data ze zdrojového okna ("drop source") a pak je přetáhnete do cíle (cíl přetažení). Vyhodíte ho uvolněním tlačítka myši. Operace eliminuje potřebu nabídek a je rychlejší než sekvence kopírování a vkládání. Existuje jenom jeden požadavek: Zdroj i cíl přetažení musí být otevřený a alespoň částečně viditelný na obrazovce.

Pomocí přetahování ole lze data snadno přenášet z jednoho umístění do jiného: v dokumentu, mezi různými dokumenty nebo mezi aplikacemi. Může být implementována v kontejneru nebo serverové aplikaci. Každá aplikace může být zdrojem přetažení, cílem odstranění nebo obojím. Pokud aplikace implementuje podporu drop-source i drop-target, můžete přetáhnout mezi podřízenými okny nebo v jednom okně. Tato funkce usnadňuje používání aplikace.

Články o datových objektech a zdrojích dat (OLE) vysvětlují, jak implementovat přenos dat ve vašich aplikacích. Je také užitečné prozkoumat ukázky MFC OLE OCLIENT a HIERSVR.

Implementace zdroje vyřazení

Pokud chcete aplikaci získat, aby poskytovala data operaci přetažení, implementujete zdroj přetažení. Základní implementace zdroje poklesu je poměrně jednoduchá. Prvním krokem je určit, jaké události začínají operací přetažení. Doporučené pokyny uživatelského rozhraní definují začátek operace přetažení, jako když dojde k WM_LBUTTONDOWN události v bodu uvnitř některých vybraných dat. Mfc OLE ukázky OCLIENT a HIERSVR se řídí těmito pokyny.

Pokud je vaše aplikace kontejnerem a vybraná data jsou propojená nebo vložený objekt typu COleClientItem, zavolejte její DoDragDrop členovou funkci. V opačném případě vytvořte COleDataSource objekt, inicializovat ho výběrem a volat členskou funkci objektu DoDragDrop zdroje dat. Pokud je vaše aplikace serverem, použijte COleServerItem::DoDragDrop. Informace o přizpůsobení standardního chování přetažení myší najdete v části Přizpůsobení přetažení.

Pokud DoDragDrop se vrátí DROPEFFECT_MOVE, okamžitě odstraňte zdrojová data ze zdrojového dokumentu. Žádný jiný návratový údaj nemá DoDragDrop žádný vliv na zdroj přetažení.

Další informace najdete v tématu Datové objekty a zdroje dat OLE: Vytváření a zničení a datové objekty OLE a zdroje dat: Manipulace.

Implementace cíle vyřazení

Implementace cíle pro odstraňování dat trvá o něco více, ale stále je poměrně jednoduchá.

Implementace cíle přetažení OLE

  1. Pokud tam ještě není, přidejte volání AfxOleInit do členské funkce vaší aplikace InitInstance . Toto volání se vyžaduje k inicializaci knihoven OLE.

  2. Přidejte do každého zobrazení v aplikaci členovou proměnnou, kterou chcete použít jako cíl pro vyřazení. Tato členová proměnná musí být typu COleDropTarget nebo třídy odvozené z ní.

  3. Z funkce třídy zobrazení, která zpracovává zprávu WM_CREATE (obvykle OnCreate), volejte členskou funkci nové členské proměnné Register . Revoke bude automaticky volána za vás, když je zobrazení zničeno.

  4. Přepište následující funkce. Pokud chcete stejné chování v celé aplikaci, přepište tyto funkce ve třídě zobrazení. Pokud chcete změnit chování v izolovaných případech nebo chcete povolit vyřazení mimoCView okna, přepište tyto funkce ve své COleDropTarget-odvozené třídě.

    Potlačit Povolit
    OnDragEnter V okně dojde k operacím přetažení. Volá se při prvním vstupu kurzoru do okna.
    OnDragLeave Speciální chování, když operace přetažení opustí zadané okno.
    OnDragOver V okně dojde k operacím přetažení. Volá se při přetahování kurzoru přes okno.
    OnDrop Zpracování dat vyřazených do zadaného okna
    OnScrollBy Speciální chování při posouvání je nezbytné v cílovém okně.

Viz MAINVIEW. Příkladem spolupráce těchto funkcí je soubor CPP, který je součástí ukázkového OCLIENT MFC OLE.

Další informace najdete v tématu Datové objekty a zdroje dat OLE: Vytváření a zničení a datové objekty OLE a zdroje dat: Manipulace.

Přizpůsobení přetažení

Výchozí implementace funkce přetažení je dostatečná pro většinu aplikací. Některé aplikace ale můžou vyžadovat, abyste toto standardní chování změnili. Tato část vysvětluje kroky potřebné ke změně těchto výchozích hodnot. Tuto techniku můžete použít k tomu, aby aplikace, které nepodporují složené dokumenty, do odkládacích zdrojů.

Pokud upravujete standardní chování ole přetažení myší nebo máte aplikaci, která není OLE, musíte vytvořit COleDataSource objekt, který bude obsahovat data. Když uživatel spustí operaci přetažení myší, měl by kód místo z jiných tříd podporujících operace přetažení volat DoDragDrop funkci z tohoto objektu.

Volitelně můžete vytvořit COleDropSource objekt pro řízení přetažení a přepsat některé jeho funkce v závislosti na typu chování, které chcete změnit. Tento drop-source objekt se pak předá, aby COleDataSource::DoDragDrop se změnilo výchozí chování těchto funkcí. Tyto různé možnosti umožňují velkou flexibilitu při podpoře operací přetažení do aplikace. Další informace o zdrojích dat najdete v článku Datové objekty a zdroje dat (OLE).

Pokud chcete přizpůsobit operace přetažení, můžete přepsat následující funkce:

Potlačit Přizpůsobení
OnBeginDrag Jak začne operace přetažení po volání DoDragDrop.
GiveFeedback Vizuální zpětná vazba, například vzhled kurzoru, pro různé výsledky přetažení
QueryContinueDrag Ukončení operace přetažení. Tato funkce umožňuje kontrolovat stavy modifikačních kláves během operace přetažení.

Viz také

OLE
Datové objekty OLE a zdroje dat
Datové objekty OLE a zdroje dat: Vytvoření a zničení
Datové objekty OLE a zdroje dat: Manipulace
COleClientItem::D oDragDrop
COleDataSource – třída
COleDataSource::D oDragDrop
COleDropSource – třída
COleDropTarget – třída
CView::OnDragLeave