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 deCOleDataSource::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á aCOleDataSource::OnRenderData
, el cual debe invalidar.o bien
Si usa un objeto
CFile
para proporcionar los datos, llame aCOleDataSource::DelayRenderFileData
en lugar de aCOleDataSource::DelayRenderData
en la opción anterior. Cuando se solicitan los datos, el marco llamará aCOleDataSource::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:
Crear un objeto
COleDataObject
y una estructura FORMATETC.Llamar a la función miembro
AttachClipboard
del objeto de datos para asociar a este con los datos del Portapapeles.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 aGetNextFormat
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)