Поделиться через


Объекты данных и источников данных: создание и разрушение

Как описано в статье Объекты данных и источников данных (OLE), объекты данных и источники данных представляют обе стороны передачи данных.В этой статье описывается, когда создать и удалить эти объекты и выполнять свои источники данных, включая:

  • Создание объектов данных

  • Уничтожение объекты данных

  • Создание источников данных

  • Уничтожение источники данных

Создание объектов данных

Объекты данных используются приложением или назначения — клиент или сервер.Объект данных в приложении назначения один конец связи между приложение источника и назначения приложения.Объект данных в приложении назначения используется для обращения и взаимодействия с данными в источнике данных.

2 Общих ситуации, когда объект данных не требуется.Первая ситуация, когда данные удаляются в приложении с помощью перетаскивание.Вторая ситуация, когда вставить или специальные вставить выбираются из меню Правка.

В ситуации перетаскивания, не нужно создать объект данных.Указатель на существующий объект данных передается функции OnDrop.Этот объект данных создается инфраструктурой как часть операции перетаскивания, а также будет удален ним.Это не всегда случаях вставить выполняется другим методом.Дополнительные сведения см. в разделе Уничтожение объекты данных.

Если приложение выполняет вставить или спецоперацию вставить, необходимо создать объект COleDataObject и вызова его функцию-член AttachClipboard.Это связывает объект данных с данными в буфере обмена.Затем этот объект можно использовать данных в функции " вставить ".

Пример того, как это делается, см. функцию DoPasteItem в файле MAINVIEW.CPP, который является частью образца ObjectName MFC OLE.OCLIENT реализует функцию, которая выполняет все операции вариант и вызывает DoPasteItem из его OnDrop, OnPaste и функций OnPasteLink.Поскольку OnDrop содержит указатель на объект данных переданному, он передает указатель на DoPasteItem.OnPaste и передайте NULLOnPasteLink для этого параметра говоря, что DoPasteItem создал объект данных и вложило его в буфер обмена.Эта схема разделяет код " вставить " поэтому достаточно отладку в одном месте, но все еще можно использовать его для обоих типов операций вставить.

Уничтожение объекты данных

Если следовать схеме, описанной в Создание объектов данных, то разрушать объекты данных тривиальный аспект передачи данных.Объект данных, который был создан в функции " вставить " при уничтожении MFC функция возвратит вставить.

Если следовать другим методом обработки операций вставить, то убедитесь в том, что объект данных уничтожается после завершения операции собственной вставить.До тех пор, пока объект не будет удален, одновременная для любого приложения успешно скопировать данные в буфер обмена.

Создание источников данных

Источники данных используются источником данных, которая может быть как клиентом или стороне сервера передачи данных.Источник данных в приложении источника один конец связи между приложение источника и назначения приложения.Целевой объект данных в приложении используется для взаимодействия с данными в источнике данных.

Источники данных создаются, когда приложению требуется скопировать данные в буфер обмена.Типичный сценарий работает следующим образом:

  1. Пользователь выбирает некоторые данные.

  2. Пользователь выбирает Копировать (или Вырезать) из меню Изменить или начинает операцию перетаскивания.

  3. В зависимости от структуры приложения, приложение создает объект COleDataSource или объект от класса, производного от COleDataSource.

  4. Выделенные данные вставляются в источник данных путем вызова одной из функций в группах COleDataSource::CacheData или COleDataSource::DelayRenderData.

  5. Приложение вызывает функцию-член SetClipboard (или функцию-член DoDragDrop если это операция перетаскивания), принадлежащих объекту, созданного на шаге 3.

  6. Если это операция Вырезать или DoDragDrop возвращает DROPEFFECT_MOVE, то данные, выбранные на шаге 1, будут удалены из документа.

Этот сценарий реализуется с образцами ObjectName и GlobalUnlock MFC OLE.Найдите источник для CView каждого из приложений - производный класс для всех функций GetClipboardData но и OnGetClipboardData.Эти 2 функции в COleClientItem или COleServerItem- реализациях производного класса.Эти примеры программ, обеспечивают хороший пример того, как реализовать эти понятия.

Одна другая ситуация, в которой может понадобиться создать объект COleDataSource происходит при изменении по умолчанию расширение функциональности операции перетаскивания.Дополнительные сведения см. в статье Перетаскивание. Настройка.

Уничтожение источники данных

Источники данных должны быть уничтожены приложением в данный момент ответственным для них.В ситуациях, когда требуется рука источник данных OLE, как вызвать COleDataSource::DoDragDrop, необходимо вызвать pDataSrc->InternalRelease.Примеры.

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

Если не вручали источник данных OLE, то ответственность за разрушать его, как и с любым типичным объектом C++.

Дополнительные сведения см. в разделе Перетаскивание, Буфер обмена и Обработка объектов данных и источники данных.

См. также

Ссылки

Класс COleDataObject

Класс COleDataSource

Основные понятия

Объекты данных и источников данных (OLE)