Udostępnij za pośrednictwem


Obiekty danych i źródła danych: operowanie

Po utworzeniu obiektu danych lub źródła danych można wykonać szereg typowych operacji na danych, takich jak wstawianie i usuwanie danych, wyliczanie formatów danych i nie tylko. W tym artykule opisano techniki niezbędne do wykonania najbardziej typowych operacji. Tematy obejmują:

Wstawianie danych do źródła danych

Sposób wstawiania danych do źródła danych zależy od tego, czy dane są dostarczane natychmiast, czy na żądanie, i w jakim nośniku są dostarczane. Możliwości są następujące.

Natychmiastowe dostarczanie danych (natychmiastowe renderowanie)

  • Wywołaj COleDataSource::CacheGlobalData wielokrotnie dla każdego formatu Schowka, w którym podajesz dane. Przekaż format Schowka do użycia, uchwyt do pamięci zawierającej dane i opcjonalnie strukturę FORMATETC opisującą dane.

    — lub —

  • Jeśli chcesz pracować bezpośrednio ze strukturami STGMEDIUM , wywołaj COleDataSource::CacheData metodę zamiast COleDataSource::CacheGlobalData w powyższej opcji.

Dostarczanie danych na żądanie (opóźnione renderowanie)

Jest to zaawansowany temat.

  • Wywołaj COleDataSource::DelayRenderData wielokrotnie dla każdego formatu Schowka, w którym podajesz dane. Przekaż format Schowka do użycia i, opcjonalnie, strukturę FORMATETC opisującą dane. Po zażądaniu danych platforma wywoła COleDataSource::OnRenderDatametodę , która musi zostać zastąpiona.

    — lub —

  • Jeśli używasz CFile obiektu do dostarczania danych, wywołaj metodę COleDataSource::DelayRenderFileData zamiast COleDataSource::DelayRenderData w poprzedniej opcji. Po zażądaniu danych platforma wywoła COleDataSource::OnRenderFileDatametodę , która musi zostać zastąpiona.

Określanie formatów dostępnych w obiekcie danych

Zanim aplikacja pozwoli użytkownikowi wkleić do niego dane, musi wiedzieć, czy w Schowku istnieją formaty, które mogą obsłużyć. W tym celu aplikacja powinna wykonać następujące czynności:

  1. Utwórz COleDataObject obiekt i strukturę FORMATETC .

  2. Wywołaj funkcję składową obiektu AttachClipboard danych, aby skojarzyć obiekt danych z danymi w Schowku.

  3. Wykonaj jedną z następujących czynności:

    • Wywołaj funkcję składową obiektu IsDataAvailable danych, jeśli potrzebujesz tylko jednego lub dwóch formatów. Pozwoli to zaoszczędzić czas w przypadkach, w których dane w Schowku obsługują znacznie więcej formatów niż aplikacja.

      — lub —

    • Wywołaj funkcję składową obiektu BeginEnumFormats danych, aby rozpocząć wyliczanie formatów dostępnych w Schowku. Następnie wywołaj metodę GetNextFormat , aż Schowek zwróci format, który aplikacja obsługuje lub nie ma więcej formatów.

Jeśli używasz ON_UPDATE_COMMAND_UI, możesz teraz włączyć opcję Wklej i, prawdopodobnie, Wklej elementy specjalne w menu Edycja. Aby to zrobić, wywołaj metodę CMenu::EnableMenuItem lub CCmdUI::Enable. Aby uzyskać więcej informacji o tym, co aplikacje kontenerów powinny robić z elementami menu i kiedy, zobacz Menu i zasoby: dodatki kontenera.

Pobieranie danych z obiektu danych

Gdy zdecydujesz się na format danych, wystarczy pobrać dane z obiektu danych. W tym celu użytkownik decyduje, gdzie umieścić dane, a aplikacja wywołuje odpowiednią funkcję. Dane będą dostępne w jednym z następujących medium:

Średnie Funkcja do wywoływania
Pamięć globalna (HGLOBAL) COleDataObject::GetGlobalData
Plik (CFile) COleDataObject::GetFileData
STGMEDIUM , struktura (IStorage) COleDataObject::GetData

Często nośnik zostanie określony wraz z formatem Schowka. Na przykład obiekt CF_EMBEDDEDSTRUCT jest zawsze w nośniku IStorage , który wymaga struktury STGMEDIUM . W związku z tym należy użyć GetData funkcji, ponieważ jest to jedyna z tych funkcji, która może akceptować strukturę STGMEDIUM .

W przypadkach, gdy format Schowka jest w formacie IStream lub HGLOBAL średnim, platforma może dostarczyć CFile wskaźnik odwołujący się do danych. Aplikacja może następnie użyć odczytu pliku, aby pobrać dane w taki sam sposób, jak może importować dane z pliku. Zasadniczo jest to interfejs po stronie klienta dla OnRenderData procedur i OnRenderFileData w źródle danych.

Użytkownik może teraz wstawić dane do dokumentu tak samo jak w przypadku innych danych w tym samym formacie.

Co chcesz dowiedzieć się więcej o

Zobacz też

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