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 quitar datos, enumerar los formatos en los que se encuentra y mucho más. En este artículo se describen las técnicas necesarias para completar las operaciones más comunes. Contenido de los temas:

Insertar 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 proporciona. Las posibilidades son las siguientes.

Proporcionar datos inmediatamente (representación inmediata)

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

    -o-

  • 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 retrasada)

Se trata de un tema avanzado.

  • Llame COleDataSource::DelayRenderData repetidamente a para cada formato del Portapapeles en el que se proporcionan 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, que debe invalidar.

    -o-

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

Determinar los formatos disponibles en un objeto de datos

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

  1. Cree un COleDataObject objeto y una estructura FORMATETC .

  2. Llame a la función miembro del AttachClipboard objeto de datos para asociar el objeto de datos a los datos del Portapapeles.

  3. Realice una de las acciones siguientes:

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

      -o-

    • Llame a la función miembro del BeginEnumFormats 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 compatible con la aplicación o no haya más formatos.

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

Recuperar datos de un objeto de datos

Una vez que haya decidido un formato de datos, todo lo que queda es 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:

Mediana Función a la que se va a llamar
Memoria global (HGLOBAL) COleDataObject::GetGlobalData
Archivo (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 IStorage medio 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 IStream medio o HGLOBAL , el marco puede proporcionar un CFile puntero 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 puede importar datos de un archivo. Básicamente, esta es la interfaz del lado cliente de las OnRenderData rutinas y OnRenderFileData del origen de datos.

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

¿Qué quieres saber más sobre

Consulte también

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