Udostępnij za pośrednictwem


Obiekty danych i źródła danych: tworzenie i likwidacja

Jak wyjaśniono w artykule Obiekty danych i źródła danych (OLE), obiekty danych i źródła danych reprezentują obie strony transferu danych. W tym artykule wyjaśniono, kiedy utworzyć i zniszczyć te obiekty i źródła w celu prawidłowego wykonywania transferów danych, w tym:

Tworzenie obiektów danych

Obiekty danych są używane przez aplikację docelową — klienta lub serwera. Obiekt danych w aplikacji docelowej to jeden koniec połączenia między aplikacją źródłową a aplikacją docelową. Obiekt danych w aplikacji docelowej służy do uzyskiwania dostępu do danych w źródle danych i interakcji z nimi.

Istnieją dwie typowe sytuacje, w których potrzebny jest obiekt danych. Pierwsza sytuacja polega na tym, że dane są porzucane w aplikacji przy użyciu przeciągania i upuszczania. Drugą sytuacją jest wybranie pozycji Wklej lub Wklej specjalne z menu Edycja.

W sytuacji przeciągania i upuszczania nie trzeba tworzyć obiektu danych. Wskaźnik do istniejącego obiektu danych zostanie przekazany do OnDrop funkcji. Ten obiekt danych jest tworzony przez strukturę w ramach operacji przeciągania i upuszczania, a także zostanie zniszczony przez nią. Nie zawsze jest tak, gdy wklejanie jest wykonywane przez inną metodę. Aby uzyskać więcej informacji, zobacz Niszczenie obiektów danych.

Jeśli aplikacja wykonuje operację specjalną wklejania lub wklejania, należy utworzyć COleDataObject obiekt i wywołać jego AttachClipboard funkcję składową. Spowoduje to skojarzenie obiektu danych z danymi w Schowku. Następnie możesz użyć tego obiektu danych w funkcji wklejania.

Niszczenie obiektów danych

Jeśli zastosujesz się do schematu opisanego w temacie Tworzenie obiektów danych, niszczenie obiektów danych jest prostym aspektem transferów danych. Obiekt danych utworzony w funkcji wklejania zostanie zniszczony przez MFC po powrocie funkcji wklejania.

Jeśli wykonasz inną metodę obsługi operacji wklejania, upewnij się, że obiekt danych zostanie zniszczony po zakończeniu operacji wklejania. Dopóki obiekt danych nie zostanie zniszczony, nie będzie można pomyślnie skopiować danych do Schowka przez każdą aplikację.

Tworzenie źródeł danych

Źródła danych są używane przez źródło transferu danych, które może być klientem lub po stronie serwera transferu danych. Źródło danych w aplikacji źródłowej to jeden koniec połączenia między aplikacją źródłową a aplikacją docelową. Obiekt danych w aplikacji docelowej służy do interakcji z danymi w źródle danych.

Źródła danych są tworzone, gdy aplikacja musi skopiować dane do Schowka. Typowy scenariusz działa w następujący sposób:

  1. Użytkownik wybiera niektóre dane.

  2. Użytkownik wybiera opcję Kopiuj (lub wytnij) z menu Edycja lub rozpoczyna operację przeciągania i upuszczania.

  3. W zależności od projektu programu aplikacja tworzy COleDataSource obiekt lub obiekt z klasy pochodzącej z COleDataSourceklasy .

  4. Wybrane dane są wstawiane do źródła danych przez wywołanie jednej z funkcji w grupach COleDataSource::CacheData lub COleDataSource::DelayRenderData .

  5. Aplikacja wywołuje SetClipboard funkcję składową (lub DoDragDrop funkcję składową, jeśli jest to operacja przeciągania i upuszczania) należąca do obiektu utworzonego w kroku 3.

  6. Jeśli jest to operacja wycinania lub DoDragDrop zwraca DROPEFFECT_MOVE, dane wybrane w kroku 1 zostaną usunięte z dokumentu.

Ten scenariusz jest implementowany przez przykłady MFC OLE OCLIENT i HIERSVR. Przyjrzyj się źródle dla klasy pochodnej każdej aplikacji CViewdla wszystkich GetClipboardData funkcji i OnGetClipboardData . Te dwie funkcje znajdują się w COleClientItem implementacjach klas pochodnych lub lub COleServerItem. Te przykładowe programy stanowią dobry przykład implementacji tych pojęć.

Jedna inna sytuacja, w której można utworzyć COleDataSource obiekt, występuje, jeśli modyfikujesz domyślne zachowanie operacji przeciągania i upuszczania. Aby uzyskać więcej informacji, zobacz artykuł Przeciąganie i upuszczanie OLE: dostosowywanie przeciągania i upuszczania .

Niszczenie źródeł danych

Źródła danych muszą zostać zniszczone przez obecnie odpowiedzialną aplikację. W sytuacjach, w których źródło danych przekazuje się do obiektu OLE, na przykład wywołanie elementu COleDataSource::D oDragDrop, należy wywołać metodę pDataSrc->InternalRelease. Przykład:

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();
   }
}

Jeśli źródło danych nie zostało przekazane ole, odpowiadasz za jego zniszczenie, podobnie jak w przypadku dowolnego typowego obiektu C++.

Aby uzyskać więcej informacji, zobacz Przeciąganie i upuszczanie, Schowek i manipulowanie obiektami danych i źródłami danych.

Zobacz też

Obiekty danych i źródła danych (OLE)
Klasa COleDataObject
Klasa COleDataSource