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 ambas caras de una transferencia de datos. En este artículo explica cuándo se deben crear y destruir estos objetos y orígenes para realizar a las transferencias de datos correctamente, incluidas estas acciones:

Crear objetos de datos

Los objetos de datos los usa la aplicación de destino, ya sea de cliente o de 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 del origen de datos e interactuar con ellos.

Existen dos situaciones comunes en las que es necesario un objeto de datos. La primera sucede al colocar datos en la aplicación con el proceso de arrastrar y colocar. La segunda sucede al elegir Pegar o Pegado especial en el menú Edición.

En el caso de arrastrar y colocar, no es necesario crear un objeto de datos. Se pasará a la función OnDrop un puntero a un objeto de datos existente. Este objeto de datos lo crea el marco como parte de la operación de arrastrar y colocar, y también será el encargado de destruirlo. Si otro método se encarga de pegar, esto no siempre es así. Para obtener más información, vea Destruir objetos de datos.

Si la aplicación realiza una operación de pegar o de pegado especial, debe crear un objeto COleDataObject y llamar a su función miembro AttachClipboard. De este modo, el objeto de datos se asocia con los datos del Portapapeles. Después puede usar este objeto de datos en la función de pegar.

Destrucción de objetos de datos

Si sigue el esquema descrito en Crear objetos de datos, la destrucción de objetos de datos es un aspecto trivial de las transferencias de datos. MFC destruirá el objeto de datos que se creó con la función para pegar cuando se vuelva a iniciar la función para pegar.

Si sigue otro método para controlar las operaciones de pegado, asegúrese de que se destruya el objeto de datos una vez completada la operación. Hasta que se destruya el objeto de datos, ninguna aplicación podrá copiar 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 lado del cliente o el lado del 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 tiene que copiar datos en el Portapapeles. Un escenario habitual sería el siguiente:

  1. El usuario selecciona algunos datos.

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

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

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

  5. La aplicación llama a la función miembro SetClipboard (o la función miembro DoDragDrop 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 se implementa en los ejemplos OLE de MFC OCLIENT e HIERSVR. Para cada clase derivada de CView de la aplicación, examine el código fuente para todas las funciones excepto GetClipboardData y OnGetClipboardData. Estas dos funciones están en las implementaciones de clase derivada COleClientItem o COleServerItem. Estos programas de ejemplo constituyen una buena muestra de cómo implementar estos conceptos.

Otra situación en la que puede que quiera crear un objeto COleDataSource sucede cuando modifica el comportamiento predeterminado de una operación de arrastrar y colocar. Para obtener más información, vea el artículo Funciones OLE de arrastrar y colocar: Personalización de arrastrar y colocar.

Destrucción de orígenes de datos

La aplicación responsable de los orígenes de datos debe destruirlos. En situaciones donde se entrega el origen de datos a OLE, como una llamada 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 entregado el origen de datos a OLE, el usuario es el responsable de destruirlo, igual que sucede con cualquier objeto habitual de C++.

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

Consulte también

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