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
Pokud tam ještě není, přidejte volání
AfxOleInit
do členské funkce vaší aplikaceInitInstance
. Toto volání se vyžaduje k inicializaci knihoven OLE.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í.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.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í mimo
CView
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