Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Nota:
La biblioteca Microsoft Foundation Classes (MFC) sigue siendo compatible. Sin embargo, ya no estamos agregando características ni actualizando la documentació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 a
COleDataSource::CacheGlobalDatarepetidamente 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-
Si desea trabajar directamente con estructuras STGMEDIUM , llame a
COleDataSource::CacheDataen lugar deCOleDataSource::CacheGlobalDataen la opción anterior.
Proporcionar datos a petición (representación diferida)
Se trata de un tema avanzado.
Llame a
COleDataSource::DelayRenderDatarepetidamente 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-
Si usa un
CFileobjeto para proporcionar los datos, llame aCOleDataSource::DelayRenderFileDataen lugar deCOleDataSource::DelayRenderDataen la opción anterior. Cuando se solicitan los datos, el marco llamará aCOleDataSource::OnRenderFileData, el cual 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:
Cree un
COleDataObjectobjeto y una estructura FORMATETC .Llamar a la función miembro
AttachClipboarddel objeto de datos para asociar a este con los datos del Portapapeles.Realice una de las acciones siguientes:
Llame a la función miembro del
IsDataAvailableobjeto 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
BeginEnumFormatsdel objeto de datos para empezar a enumerar los formatos disponibles en el Portapapeles. A continuación, llame aGetNextFormathasta 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 los elementos Pegar y, posiblemente, Pegado especial 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 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 puede importar datos de un archivo. Básicamente, esta es la interfaz del lado del 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 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