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