Объекты и источники данных. Создание и деструкция
Как описано в статье Объекты данных и источники данных OLE (), объекты данных и источники данных представляют обе стороны передачи данных. В этой статье описывается при создании и удалить эти объекты и источники для выполнения для передачи данных правильно, включая:
Создание объектов данных
Уничтожения объектов данных
Создание источников данных
Уничтожения источники данных
Создание объектов данных
Объекты данных используются приложением назначения — или клиент или сервер. Объект данных в приложении назначения один конец связи между приложение источника и назначения приложения. Объект данных в приложении назначения используется для получения и взаимодействия с данными в источнике данных.
2 Общие ситуации, когда объект данных. Первая ситуация, когда данные удален в приложении с помощью перетаскивания. Вторая ситуация, когда вставить или Специальная вставки выбираются из меню " Правка ".
В случае перетаскивания не требуется создать объект данных. Указатель на существующий объект данных будет передается в функцию OnDrop. Этот объект данных создается инфраструктурой как часть операции перетаскивания, а также уничтожается им. Это не всегда случаи вставить с другим методом. Дополнительные сведения см. в разделе Уничтожения объектов данных.
Если приложение выполняет операцию " или специальных вставки, необходимо создать объект COleDataObject и вызывать функцию-член AttachClipboard. Это связывает объект данных данными в буфер обмена. Затем можно использовать этот объект данных в функции ".
Пример того, как это сделать, см. в разделе MAINVIEW.CPP функции DoPasteItem в файле, который является частью образца OCLIENT MFC OLE. OCLIENT реализует функцию, которая выполняет все операции " и вызывает функцию DoPasteItem из своих OnDrop, OnPaste и функций OnPasteLink. Поскольку OnDrop имеет указатель на объект данных переданному в него, он передает указатель на значение DoPasteItem. OnPaste и передать значение NULL для параметра OnPasteLink, сущности, что DoPasteItem " и вложило объект данных в буфер обмена. Эта схема показывает код ", если необходимо отладить его в одном месте, но все равно можно использовать его для обоих типов операций ".
Уничтожения объектов данных
Если следовать схема, описанную в разделе Создание объектов данных, то удалить объекты данных тривиальный аспект передачи данных. Объект данных, который был создан в функции " уничтожается MFC, когда функция возвращает ".
Если следовать другой метод обработки операции ", убедитесь, что объект данных уничтожается после того, как операция " завершена. До тех пор, пока объект данных не уничтожается, будет невозможно для любого приложения успешно копировать данные в буфер обмена.
Создание источников данных
Источники данных используются источником передачи данных, которая может быть как клиентом или стороной сервера передачи данных. Источник данных в приложении источника один конец связи между приложение источника и назначения приложения. Объект данных в приложении назначения используется для взаимодействия с данными в источнике данных.
Источники данных создаются, когда приложению требуется скопировать данные в буфер обмена. Типичный сценарий выполняется следующим образом:
Пользователь выбирает некоторые данные.
Пользователь выбирает Копировать (или Вырезать) в меню Изменить или начала операции перетаскивания.
В зависимости от разработки программы, приложение создает объект или COleDataSource или объект из производного класса из COleDataSource.
Выбранные данные вставляются в источник данных, вызвав одну из функций групп COleDataSource::CacheData или COleDataSource::DelayRenderData.
Приложение вызывает функцию-член SetClipboard (или функцию-член DoDragDrop, если это операция перетаскивания), относящийся к объекту, созданный на шаге 3.
Если это операция Вырезать или 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++.
Дополнительные сведения см. в разделах Перетаскивание, Буфер обмена и Работу с объектами данных и источников данных.