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ę zamiastCOleDataSource::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łaCOleDataSource::OnRenderData
metodę , która musi zostać zastąpiona.— lub —
Jeśli używasz
CFile
obiektu do dostarczania danych, wywołaj metodęCOleDataSource::DelayRenderFileData
zamiastCOleDataSource::DelayRenderData
w poprzedniej opcji. Po zażądaniu danych platforma wywołaCOleDataSource::OnRenderFileData
metodę , 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:
Utwórz
COleDataObject
obiekt i strukturę FORMATETC .Wywołaj funkcję składową obiektu
AttachClipboard
danych, aby skojarzyć obiekt danych z danymi w Schowku.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