Udostępnij za pośrednictwem


Przeciąganie i upuszczanie elementów OLE

Funkcja przeciągania i upuszczania OLE jest przede wszystkim skrótem do kopiowania i wklejania danych. Jeśli używasz Schowka do kopiowania lub wklejania danych, wymagana jest liczba kroków. Wybierz dane, a następnie wybierz pozycję Wytnij lub Kopiuj z menu Edycja . Następnie przejdziesz do docelowej aplikacji lub okna i umieść kursor w lokalizacji docelowej. Na koniec wybierz pozycję Edytuj>wklej z menu.

Funkcja przeciągania i upuszczania OLE różni się od mechanizmu przeciągania i upuszczania Menedżera plików. Menedżer plików może obsługiwać tylko nazwy plików i jest przeznaczony specjalnie do przekazywania nazw plików do aplikacji. Przeciąganie i upuszczanie w obiekcie OLE jest znacznie bardziej ogólne. Umożliwia przeciąganie i upuszczanie wszelkich danych, które można również umieścić w Schowku.

W przypadku używania przeciągania i upuszczania OLE należy usunąć dwa kroki procesu. Dane są wybierane z okna źródłowego ("źródło upuszczania"), a następnie przeciągnij je do miejsca docelowego ("upuść element docelowy"). Upuść go, zwalniając przycisk myszy. Operacja eliminuje konieczność korzystania z menu i jest szybsza niż sekwencja kopiowania/wklejania. Istnieje tylko jedno wymaganie: zarówno źródło upuszczania, jak i miejsce docelowe upuszczania muszą być otwarte i przynajmniej częściowo widoczne na ekranie.

Przeciąganie i upuszczanie OLE umożliwia łatwe przesyłanie danych z jednej lokalizacji do innej: w obrębie dokumentu, między różnymi dokumentami lub między aplikacjami. Można go zaimplementować w kontenerze lub aplikacji serwera. Każda aplikacja może być źródłem upuszczania, obiektem docelowym upuszczania lub obydwoma. Jeśli aplikacja implementuje obsługę typu drop-source i drop-target, można przeciągać i upuszczać między oknami podrzędnymi lub w jednym oknie. Ta funkcja znacznie ułatwia korzystanie z aplikacji.

Artykuły Obiekty danych i źródła danych (OLE) wyjaśniają sposób implementowania transferu danych w aplikacjach. Warto również zapoznać się z przykładami MFC OLE OCLIENT i HIERSVR.

Implementowanie źródła upuszczania

Aby aplikacja dostarczała dane do operacji przeciągania i upuszczania, należy zaimplementować źródło upuszczania. Podstawowa implementacja źródła upuszczania jest stosunkowo prosta. Pierwszym krokiem jest określenie, jakie zdarzenia rozpoczynają operację przeciągania. Zalecane wytyczne dotyczące interfejsu użytkownika definiują początek operacji przeciągania, tak jak w przypadku wystąpienia zdarzenia WM_LBUTTONDOWN w punkcie wewnątrz niektórych wybranych danych. Przykłady MFC OLE OCLIENT i HIERSVR są zgodne z tymi wytycznymi.

Jeśli aplikacja jest kontenerem, a wybrane dane są połączonym lub osadzonym obiektem typu COleClientItem, wywołaj jego DoDragDrop funkcję składową. W przeciwnym razie skonstruuj COleDataSource obiekt, zainicjuj go za pomocą zaznaczenia i wywołaj funkcję składową obiektu DoDragDrop źródła danych. Jeśli aplikacja jest serwerem, użyj polecenia COleServerItem::DoDragDrop. Aby uzyskać informacje na temat dostosowywania standardowego zachowania przeciągania i upuszczania, zobacz sekcję Dostosowywanie przeciągania i upuszczania.

Jeśli DoDragDrop zwraca DROPEFFECT_MOVE, usuń dane źródłowe z dokumentu źródłowego natychmiast. Żadna inna wartość zwracana ze DoDragDrop źródła nie ma żadnego wpływu na źródło upuszczania.

Aby uzyskać więcej informacji, zobacz Obiekty danych OLE i źródła danych: Tworzenie i niszczenie oraz obiekty danych OLE i źródła danych: Manipulowanie.

Implementowanie miejsca docelowego upuszczania

Implementacja celu upuszczania niż źródło drop zajmuje nieco więcej pracy, ale nadal jest stosunkowo prosta.

Aby zaimplementować cel upuszczania OLE

  1. Jeśli jeszcze go nie ma, dodaj wywołanie funkcji AfxOleInit składowej InitInstance aplikacji. To wywołanie jest wymagane do zainicjowania bibliotek OLE.

  2. Dodaj zmienną składową do każdego widoku w aplikacji, która ma być obiektem docelowym upuszczania. Ta zmienna składowa musi być typu COleDropTarget lub klasy pochodnej.

  3. Z funkcji klasy widoku, która obsługuje komunikat WM_CREATE (zazwyczaj OnCreate), wywołaj funkcję składową nowej zmiennej składowej Register . Revoke zostanie wywołana automatycznie, gdy widok zostanie zniszczony.

  4. Zastąpi następujące funkcje. Jeśli chcesz to samo zachowanie w całej aplikacji, przesłoń te funkcje w klasie view. Jeśli chcesz zmodyfikować zachowanie w izolowanych przypadkach lub chcesz włączyć usuwanie w oknach innych niżCView okna, przesłoń te funkcje w COleDropTargetklasie -pochodnej.

    Zastąp Aby zezwolić
    OnDragEnter Usuwanie operacji w oknie. Wywołana po pierwszym wejściu kursora do okna.
    OnDragLeave Specjalne zachowanie, gdy operacja przeciągania opuszcza określone okno.
    OnDragOver Usuwanie operacji w oknie. Wywoływana, gdy kursor jest przeciągany przez okno.
    OnDrop Obsługa danych porzuconych w określonym oknie.
    OnScrollBy Specjalne zachowanie podczas przewijania jest konieczne w oknie docelowym.

Zobacz WIDOK MAINVIEW. Plik CPP, który jest częścią przykładowego obiektu OCLIENT MFC OLE, aby uzyskać przykład współpracy tych funkcji.

Aby uzyskać więcej informacji, zobacz Obiekty danych OLE i źródła danych: Tworzenie i niszczenie oraz obiekty danych OLE i źródła danych: Manipulowanie.

Dostosowywanie przeciągania i upuszczania

Domyślna implementacja funkcji przeciągania i upuszczania jest wystarczająca dla większości aplikacji. Jednak niektóre aplikacje mogą wymagać zmiany tego standardowego zachowania. W tej sekcji opisano kroki niezbędne do zmiany tych wartości domyślnych. Ta technika umożliwia tworzenie aplikacji, które nie obsługują złożonych dokumentów w źródłach upuszczania.

Jeśli dostosowujesz standardowe zachowanie przeciągania i upuszczania OLE lub masz aplikację COleDataSource inną niż OLE, musisz utworzyć obiekt zawierający dane. Gdy użytkownik rozpocznie operację przeciągania i upuszczania, kod powinien wywołać DoDragDrop funkcję z tego obiektu zamiast z innych klas, które obsługują operacje przeciągania i upuszczania.

Opcjonalnie możesz utworzyć COleDropSource obiekt w celu kontrolowania upuszczania i zastępowania niektórych jego funkcji w zależności od typu zachowania, które chcesz zmienić. Ten obiekt drop-source jest następnie przekazywany do, aby COleDataSource::DoDragDrop zmienić domyślne zachowanie tych funkcji. Te różne opcje umożliwiają dużą elastyczność obsługi operacji przeciągania i upuszczania w aplikacji. Aby uzyskać więcej informacji na temat źródeł danych, zobacz artykuł Obiekty danych i źródła danych (OLE) .

Następujące funkcje można zastąpić, aby dostosować operacje przeciągania i upuszczania:

Zastąp Aby dostosować
OnBeginDrag Jak rozpoczyna się operacja przeciągania po wywołaniu metody DoDragDrop.
GiveFeedback Opinie wizualne, takie jak wygląd kursora, dla różnych wyników upuszczania.
QueryContinueDrag Zakończenie operacji przeciągania i upuszczania. Ta funkcja umożliwia sprawdzanie stanów kluczy modyfikatora podczas operacji przeciągania.

Zobacz też

OLE
Obiekty danych OLE i źródła danych
Obiekty danych OLE i źródła danych: tworzenie i niszczenie
Obiekty danych OLE i źródła danych: Manipulowanie
COleClientItem::D oDragDrop
COleDataSource, klasa
COleDataSource::D oDragDrop
COleDropSource, klasa
COleDropTarget, klasa
CView::OnDragLeave