Obiekty danych i źródła danych: tworzenie i likwidacja
Jak wyjaśniono w artykule obiekty danych i źródeł danych (OLE), obiektów danych i źródeł danych reprezentują obu stron transferu danych.W tym artykule wyjaśniono, kiedy tworzą i niszczą te obiekty i źródeł należyte danych transferu danych, w tym:
Tworzenie obiektów danych
Niszczenie danych przedmiotów
Tworzenie źródła danych
Niszczenie źródła danych
Tworzenie obiektów danych
Obiekty danych są używane przez aplikację docelową — klient lub serwer.Obiekt danych w aplikacji docelowej jest jeden koniec połączenia między aplikacja źródłowa i docelowa aplikacja.Obiekt danych w aplikacji docelowej jest używany do dostępu i Praca z danymi w źródle danych.
Istnieją dwie typowe sytuacje, w których potrzebna jest obiektem danych.Pierwsza sytuacja jest po upuszczeniu danych w aplikacji za pomocą operacji przeciągania i upuszczania.Druga sytuacja jest po wybraniu Wklej lub Wklej specjalnie w menu Edycja.
W sytuacji przeciągania i upuszczania nie trzeba tworzyć obiektów danych.Wskaźnik do istniejącego obiektu danych zostaną przekazane do swojej OnDrop funkcji.Ten obiekt danych jest tworzony w ramach w ramach operacji przeciągania i upuszczania i również zostaną zniszczone przez nią.To nie jest zawsze podczas wklejania odbywa się w inny sposób.Aby uzyskać więcej informacji, zobacz Niszczy obiekty danych.
Jeśli aplikacja wykonuje Wklej lub specjalnych operacji wklejania, należy utworzyć COleDataObject obiektu i wywołania jego AttachClipboard funkcji składowej.Obiekt danych zostanie skojarzony z danych w Schowku.Ten obiekt danych można następnie użyć w funkcji Wklej.
Aby uzyskać przykład tego, jak to zrobić, zobacz DoPasteItem funkcja w MAINVIEW.CPP plik część próbki MFC OLE OCLIENT.OCLIENT implementuje funkcję, która sprawdza wszystkie operacje wklejania i wywołania DoPasteItem z jej OnDrop, OnPaste, i OnPasteLink funkcji.Ponieważ OnDrop ma wskaźnik do obiektu danych przekazywanych do niej przechodzi wskaźnik do DoPasteItem.OnPastei OnPasteLink pass NULL dla tego parametru, informującego o DoPasteItem do tworzenia obiektu danych i dołączyć go do Schowka.Ten schemat oddziela kodu Wklej, więc musisz zdebuguj go w jednym miejscu, ale nadal można go używać dla obu rodzajów operacji wklejania.
Niszczenie danych przedmiotów
Jeśli zastosujesz schematu opisanego w Tworzenia obiektów danych, niszczenie danych przedmiotów jest trivial aspektów przesyłania danych.Obiekt danych, który został utworzony w funkcji Wklej zostaną zniszczone przez MFC, gdy zwraca funkcja Wklej.
Jeśli wykonasz innej metody obsługi operacje wklejania, upewnij się, że obiekt danych jest niszczony, po ukończeniu operację wklejania.Do momentu zniszczenia obiektu danych będzie niemożliwe dla każdej aplikacji pomyślnie skopiować dane do Schowka.
Tworzenie źródła danych
Źródła danych są używane przez źródło transferu danych, który może być klienta lub transfer danych po stronie serwera.Źródła danych w aplikacji źródłowej jest jeden koniec połączenia między aplikacja źródłowa i docelowa aplikacja.Obiekt danych w aplikacji docelowej jest używany do interakcji z danymi w źródle danych.
Źródła danych są tworzone, gdy aplikacja wymaga skopiować dane do Schowka.Typowy scenariusz działa następująco:
Gdy użytkownik wybierze niektóre dane.
Użytkownik zdecyduje się na kopię (lub Wytnij) z edytować menu lub zaczyna się od operacji przeciągania i upuszczania.
W zależności od projektu programu, aplikacja tworzy albo COleDataSource lub obiektu z klasą pochodną COleDataSource.
Wybrane dane jest wstawiany do źródła danych poprzez wywołanie jednej z funkcji w COleDataSource::CacheData lub COleDataSource::DelayRenderData grup.
Aplikacja wywoła SetClipboard funkcji składowej (lub DoDragDrop funkcji członka, jeżeli jest to operacja przeciągania i upuszczania) należących do obiektu utworzonego w kroku 3.
Jeśli jest to Wytnij operacji lub DoDragDrop zwraca DROPEFFECT_MOVE, skreśla się dane wybrane w kroku 1 z dokumentu.
W tym scenariuszu jest implementowana przez próbek MFC OLE OCLIENT i HIERSVR.Szukaj u źródła dla każdej aplikacji CView-klasy dla wszystkich, ale GetClipboardData i OnGetClipboardData funkcji.Te dwie funkcje są w każdym COleClientItem lub COleServerItem-pochodnych implementacje klasy.Te przykładowe programy stanowią dobry przykład sposobu wdrożenia tych pojęć.
Jeden innych sytuacji, w której można utworzyć COleDataSource obiekt występuje wtedy, gdy modyfikujesz domyślne zachowanie operacji przeciągania i upuszczania.Aby uzyskać więcej informacji, zobacz przeciągnij i upuść: dostosowywanie art.
Niszczenie źródła danych
Źródła danych muszą zostać zniszczone przez aplikację aktualnie odpowiedzialnych za.W sytuacjach, gdzie ręcznie źródło danych OLE, takich jak wywoływania COleDataSource::DoDragDrop, trzeba wywołać pDataSrc ->InternalRelease.Na 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 nie przekazały źródła danych OLE, to odpowiedzialny za zniszczenie, podobnie jak w przypadku dowolnego obiektu typowego języka C++.
Aby uzyskać więcej informacji, zobacz operacji przeciągania i upuszczania, Schowka, i manipulowania obiekty danych i źródła danych.