Compartir a través de


Objetos de datos y orígenes de datos: manipulación

Una vez creado un objeto de datos o un origen de datos, puede realizar una serie de operaciones comunes en los datos, como insertar y eliminar datos, enumerar los formatos en los que están los datos, etc. En este artículo se describen las técnicas necesarias para completar las operaciones más habituales. Contenido de los temas:

Inserción de datos en un origen de datos

La forma en que se insertan los datos en un origen de datos depende de si los datos se suministran inmediatamente o a petición y en qué medio se proporcionan. Las posibilidades son las siguientes.

Proporcionar los datos inmediatamente (representación inmediata)

  • Llame a COleDataSource::CacheGlobalData repetidamente para cada formato del Portapapeles en el que se proporcionan los datos. Pase el formato del Portapapeles que se va a usar, un identificador para la memoria que contiene los datos y, opcionalmente, una estructura FORMATETC que describe los datos.

    o bien

  • Si desea trabajar directamente con estructuras STGMEDIUM, llame a COleDataSource::CacheData en lugar de COleDataSource::CacheGlobalData en la opción anterior.

Proporcionar datos a petición (representación diferida)

Este es un tema avanzado.

  • Llame a COleDataSource::DelayRenderData repetidamente para cada formato del Portapapeles en el que se proporcionan los datos. Pase el formato del Portapapeles que se va a usar y, opcionalmente, una estructura FORMATETC que describa los datos. Cuando se solicitan los datos, el marco llamará a COleDataSource::OnRenderData, el cual debe invalidar.

    o bien

  • Si usa un objeto CFile para proporcionar los datos, llame a COleDataSource::DelayRenderFileData en lugar de a COleDataSource::DelayRenderData en la opción anterior. Cuando se solicitan los datos, el marco llamará a COleDataSource::OnRenderFileData, el cual debe invalidar.

Determinación de los formatos disponibles en un objeto de datos

Antes de que una aplicación permita al usuario pegar datos en ella, debe saber si hay formatos en el Portapapeles que puede controlar. Para ello, la aplicación debe hacer lo siguiente:

  1. Crear un objeto COleDataObject y una estructura FORMATETC.

  2. Llamar a la función miembro AttachClipboard del objeto de datos para asociar a este con los datos del Portapapeles.

  3. Realice una de las siguientes acciones:

    • Llamar a la función miembro IsDataAvailable del objeto de datos si solo necesita uno o dos formatos. Esto le ahorrará tiempo en los casos en los que los datos del Portapapeles admitan significativamente más formatos que la aplicación.

      o bien

    • Llame a la función miembro BeginEnumFormats del objeto de datos para empezar a enumerar los formatos disponibles en el Portapapeles. A continuación, llame a GetNextFormat hasta que el Portapapeles devuelva un formato que admita la aplicación o no haya más formatos.

Si usa ON_UPDATE_COMMAND_UI, ahora puede habilitar los elementos Pegar y, posiblemente, Pegado especial en el menú Editar. Para ello, llame a CMenu::EnableMenuItem o CCmdUI::Enable. Para más información sobre lo que las aplicaciones contenedoras deben hacer con los elementos de menú y cuándo deben hacerlo, consulte Menús y recursos: Adiciones de contenedor.

Recuperar datos de un objeto de datos

Una vez que haya decidido un formato de datos, solo tiene que recuperar los datos del objeto de datos. Para ello, el usuario decide dónde colocar los datos y la aplicación llama a la función adecuada. Los datos estarán disponibles en uno de los medios siguientes:

Media Función a la que se va a llamar
Memoria global (HGLOBAL) COleDataObject::GetGlobalData
File (CFile) COleDataObject::GetFileData
Estructura STGMEDIUM (IStorage) COleDataObject::GetData

Normalmente, el medio se especificará junto con su formato de Portapapeles. Por ejemplo, un objeto CF_EMBEDDEDSTRUCT siempre está en un medio IStorage que requiere una estructura STGMEDIUM. Por lo tanto, usaría GetData porque es la única de estas funciones que puede aceptar una estructura STGMEDIUM.

En los casos en los que el formato del Portapapeles está en un medio IStream o HGLOBAL, el marco puede proporcionar un puntero CFile que haga referencia a los datos. Después, la aplicación puede usar la lectura de archivos para obtener los datos de la misma manera que lo haría con la importación de datos de un archivo. Fundamentalmente, esta es la interfaz del lado cliente para las rutinas OnRenderData y OnRenderFileData del origen de datos.

El usuario ahora puede insertar datos en el documento igual que para cualquier otro dato del mismo formato.

Qué más quieres saber

Consulte también

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