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
Jeśli jeszcze go nie ma, dodaj wywołanie funkcji
AfxOleInit
składowejInitInstance
aplikacji. To wywołanie jest wymagane do zainicjowania bibliotek OLE.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.Z funkcji klasy widoku, która obsługuje komunikat WM_CREATE (zazwyczaj
OnCreate
), wywołaj funkcję składową nowej zmiennej składowejRegister
.Revoke
zostanie wywołana automatycznie, gdy widok zostanie zniszczony.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 wCOleDropTarget
klasie -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