Objetos de datos y orígenes de datos: creación y Destruction
Como se explica en el caso objetos de datos y orígenes de datos (OLE), los objetos de datos y los orígenes de datos representan los dos lados de una transferencia de datos.En este artículo se explica a crear y destruir estos objetos y orígenes para realizar sus transferencias de datos correctamente, como:
Crear objetos de datos
Objetos de datos de destrucción
Crear orígenes de datos
Orígenes de datos de destrucción
Crear objetos de datos
Los objetos de datos son utilizados por la aplicación destino — el cliente o el servidor.Un objeto de datos en la aplicación destino es un extremo de una conexión entre la aplicación de origen y la aplicación de destino.Un objeto de datos en la aplicación destino se utiliza para obtener acceso e interactuar con los datos en el origen de datos.
Hay dos escenarios comunes cuando se necesita un objeto de datos.El primer escenario es cuando se colocan los datos en su aplicación mediante arrastrar y colocar.El segundo caso es cuando pegar o el Pegado especial se elige en el menú Edición.
En una situación de arrastrar y colocar, no necesita crear un objeto de datos.Un puntero a un objeto de datos existentes se pasarán a la función de OnDrop .Este objeto de datos crea el marco como parte de la operación de arrastrar y colocar y también se destruirá por ella.Esto no siempre es así al pegar realiza otro método.Para obtener más información, vea objetos de datos de destrucción.
Si la aplicación está realizando una operación de pegar o una operación especial de pegar, debe crear un objeto de COleDataObject y llamar a su función miembro de AttachClipboard .Esto asocia el objeto de datos a los datos en el portapapeles.Puede usar este objeto de datos en la función pegar.
Para obtener un ejemplo de cómo haya hecho esto, vea la función de DoPasteItem en el archivo de MAINVIEW.CPP que forma parte del ejemplo OLE OCLIENTMFC.OCLIENT implementa una función que realiza todas las operaciones de pegar y llame a DoPasteItem del OnDrop, OnPaste, y funciones de OnPasteLink .Dado que OnDrop tiene un puntero a un objeto de datos pasado a, pasa el puntero en DoPasteItem.OnPaste y paso NULL de OnPasteLink para este parámetro, que indica a DoPasteItem que cree un objeto de datos y asociarla al portapapeles.Este esquema separa el código de pegar lo que tiene que depurarlo sólo en un lugar, pero todavía puede utilizarlo para ambos tipos de operaciones pegar.
Objetos de datos de destrucción
Si sigue el esquema describe en crear objetos de datos, la destrucción de objetos de datos es un aspecto trivial de transferencias de datos.El objeto de datos creado en la función de pegar se destruirá por MFC cuando la función de pegar devuelve.
Si sigue otro método de administrar operaciones de pegar, asegúrese de que el objeto de datos se destruirá después de que se complete la operación de pegar.Hasta que se destruya el objeto de datos, será imposible que cualquier aplicación copie correctamente datos en el portapapeles.
Crear orígenes de datos
Los orígenes de datos son utilizados por el origen de la transferencia de datos, que puede ser el cliente o el servidor de transferencia de datos.Un origen de datos en la aplicación origen es un extremo de una conexión entre la aplicación de origen y la aplicación de destino.Un objeto de datos en la aplicación destino se utiliza para interactuar con los datos del origen de datos.
Se crean los orígenes de datos cuando una aplicación necesita copiar datos en el portapapeles.Se ejecuta típicos de un escenario tienen como de esto:
El usuario selecciona algunos datos.
El usuario elige Copiar (o Cortar) del menú o de comienza de Editar una operación de arrastrar y colocar.
Dependiendo del diseño del programa, la aplicación crea un objeto de COleDataSource o un objeto de una clase derivada de COleDataSource.
Los datos seleccionados se incrusta en el origen de datos llamando a una de las funciones de los grupos de COleDataSource::CacheData o de COleDataSource::DelayRenderData .
La aplicación llama a la función miembro de SetClipboard (o la función miembro de DoDragDrop si es una operación de arrastrar y colocar) que pertenece al objeto creado en el paso 3.
Si es una operación de Cortar o DoDragDrop devuelve DROPEFFECT_MOVE, los datos seleccionados en el paso 1 se elimina del documento.
Este escenario es implementada por los ejemplos OCLIENT y HIERSVRMFC OLE.Busque el origen para CViewde cada aplicación - clase derivada para todos pero las funciones de GetClipboardData y de OnGetClipboardData .Estas dos funciones están en COleClientItem o COleServerItem- implementaciones de la clase derivada.Estos programas de ejemplo proporcionan un buen ejemplo de cómo implementar estos conceptos.
Otro caso en el que puede crear un objeto de COleDataSource aparece si va a modificar el comportamiento predeterminado de una operación de arrastrar y colocar.Para obtener más información, vea el artículo de Arrastrar y colocar: el personalizar .
Orígenes de datos de destrucción
Los orígenes de datos deben destruir por la aplicación actualmente responsable de ellos.En situaciones donde se entregan el origen de datos OLE, como llamar a COleDataSource::DoDragDrop, debe llamar a pDataSrc->InternalRelease.Por ejemplo:
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();
}
}
Si no ha especificado el origen de datos OLE, entonces es responsable de destruirlo, como cualquier objeto común de C++.
Para obtener más información, vea Arrastrar y colocar, Portapapeles, y objetos de datos y orígenes de datos de manipulación.