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


Объекты и источники данных. Создание и деструкция

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Этот сценарий реализуется образцами MFC OLE OCLIENT и HIERSVR. Просмотрите источник для 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 C++.

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

См. также

Ссылки

Класс COleDataObject

Класс COleDataSource

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

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