Compartir a través de


Objetos de datos y orígenes de datos: creación y destrucción

Como se explica en el artículo Objetos de datos y orígenes de datos (OLE), los objetos de datos y los orígenes de datos representan ambos lados de una transferencia de datos. En este artículo se explica cuándo crear y destruir estos objetos y orígenes para realizar correctamente las transferencias de datos, entre las que se incluyen:

Crear objetos de datos

La aplicación de destino usa objetos de datos, ya sea el cliente o el servidor. Un objeto de datos de la aplicación de destino es un extremo de una conexión entre la aplicación de origen y la aplicación de destino. Un objeto de datos de la aplicación de destino se usa para acceder a los datos e interactuar con ellos en el origen de datos.

Hay dos situaciones comunes en las que se necesita un objeto de datos. La primera situación es cuando los datos se quitan en la aplicación mediante arrastrar y colocar. La segunda situación es cuando se elige Pegar o Pegar especial en el menú Editar.

En una situación de arrastrar y colocar, no es necesario crear un objeto de datos. Se pasará un puntero a un objeto de datos existente a la OnDrop función. El marco crea este objeto de datos como parte de la operación de arrastrar y colocar y también lo destruirá. Esto no siempre es el caso cuando otro método realiza el pegado. Para obtener más información, vea Destruir objetos de datos.

Si la aplicación está realizando una operación especial pegar o pegar, debe crear un COleDataObject objeto y llamar a su AttachClipboard función miembro. Esto asocia el objeto de datos a los datos del Portapapeles. A continuación, puede usar este objeto de datos en la función paste.

Destrucción de objetos de datos

Si sigue el esquema descrito en Crear objetos de datos, destruir objetos de datos es un aspecto trivial de las transferencias de datos. MFC destruirá el objeto de datos creado en la función de pegado cuando la función de pegado devuelva.

Si sigue otro método para controlar las operaciones de pegado, asegúrese de que el objeto de datos se destruye una vez completada la operación de pegado. Hasta que se destruye el objeto de datos, será imposible que cualquier aplicación copie correctamente los datos en el Portapapeles.

Creación de orígenes de datos

Los orígenes de datos los usa el origen de la transferencia de datos, que puede ser el cliente o el lado servidor de la transferencia de datos. Un origen de datos de la aplicación de origen es un extremo de una conexión entre la aplicación de origen y la aplicación de destino. Un objeto de datos de la aplicación de destino se usa para interactuar con los datos del origen de datos.

Los orígenes de datos se crean cuando una aplicación necesita copiar datos en el Portapapeles. Un escenario típico se ejecuta de la siguiente manera:

  1. El usuario selecciona algunos datos.

  2. El usuario elige Copiar (o Cortar) en el menú Editar o comienza una operación de arrastrar y colocar.

  3. Según el diseño del programa, la aplicación crea un COleDataSource objeto o un objeto a partir de una clase derivada de COleDataSource.

  4. Los datos seleccionados se insertan en el origen de datos llamando a una de las funciones de los COleDataSource::CacheData grupos o COleDataSource::DelayRenderData .

  5. La aplicación llama a la SetClipboard función miembro (o a la DoDragDrop función miembro si se trata de una operación de arrastrar y colocar) que pertenece al objeto creado en el paso 3.

  6. Si se trata de una operación Cortar o DoDragDrop devuelve DROPEFFECT_MOVE, los datos seleccionados en el paso 1 se eliminan del documento.

Este escenario lo implementan los ejemplos OLE de MFC OCLIENT y HIERSVR. Examine el origen de la clase derivada de CViewcada aplicación para todas las GetClipboardData funciones y OnGetClipboardData . Estas dos funciones se encuentran en las implementaciones de clase COleClientItem derivadas o COleServerItem. Estos programas de ejemplo proporcionan un buen ejemplo de cómo implementar estos conceptos.

Otra situación en la que es posible que desee crear un COleDataSource objeto se produce si está modificando el comportamiento predeterminado de una operación de arrastrar y colocar. Para obtener más información, consulte el artículo Arrastrar y colocar OLE: Personalizar arrastrar y colocar .

Destrucción de orígenes de datos

La aplicación debe destruir los orígenes de datos actualmente responsables de ellos. En situaciones en las que se entrega el origen de datos a OLE, como llamar a COleDataSource::D oDragDrop, debe llamar pDataSrc->InternalReleasea . 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 entregado el origen de datos a OLE, es responsable de destruirlo, como con cualquier objeto típico de C++.

Para obtener más información, vea Arrastrar y colocar, Portapapeles y Manipular objetos de datos y orígenes de datos.

Consulte también

Objetos de datos y orígenes de datos (OLE)
Clase COleDataObject
Clase COleDataSource