Interfaces de transferencia de datos
La interfazIDataObjectproporciona a los consumidores de datos métodos para obtener y establecer los datos de un objeto, determinar qué formato admite el objeto y registrar para y recibir notificaciones cuando cambian los datos del objeto. Al obtener datos, un autor de la llamada puede especificar el formato en el que desea representar los datos. Sin embargo, el origen de los datos determina el medio de almacenamiento, que devuelve en un parámetro out proporcionado por el autor de la llamada.
Por sí mismo, IDataObject proporciona todas las herramientas necesarias para implementar transferencias del Portapapeles de Windows o transferencias de documentos compuestos en las aplicaciones. Si también desea admitir transferencias de arrastrar y colocar, debe implementar las IDropSource y interfaces de IDropTarget junto con IDataObject.
La interfazIDataObject combinada con las API del Portapapeles OLE proporciona todas las funcionalidades de las API del Portapapeles de Windows. Por lo general, no es necesario usar ambas API del Portapapeles. Los proveedores de datos que admiten transferencias de arrastrar y colocar o documentos compuestos OLE deben implementar la interfaz IDataObject. Si la aplicación solo admite transferencias del Portapapeles ahora, pero tiene previsto agregar documentos compuestos o de arrastrar y colocar en versiones posteriores, es posible que quiera implementar IDataObject y las API del Portapapeles OLE ahora para minimizar la cantidad de tiempo invertido en recodificar y depurar más adelante. También puede implementar IDataObject para poder usar medios de transferencia distintos de la memoria global.
En la tabla siguiente se resumen los que se van a usar, en función de los tipos de transferencia de datos que desee admitir:
Para admitir | Uso |
---|---|
Documentos compuestos |
IDataObject |
Arrastrar y colocar transferencias |
IDataObject , IDropSource, IDropTarget, DoDragDrop (o equivalente) |
Transferencias del Portapapeles mediante memoria global exclusivamente |
api del Portapapeles |
Portapapeles transfiere mediante medios de intercambio distintos de la memoria global. |
IDataObject |
El Portapapeles transfiere ahora, pero arrastra y coloca o documentos compuestos más adelante |
IDataObject y las interfaces y la función enumeradas anteriormente para "Arrastrar y colocar transferencias" |
Cuando un usuario inicia una operación de transferencia de datos, la aplicación de origen crea una instancia de IDataObject y a través de ella hace que los datos estén disponibles en uno o varios formatos. En una transferencia del Portapapeles, la aplicación llama a la funciónoleSetClipboardpara pasar un puntero de objeto de datos a OLE. (OleSetClipboard también ofrece formatos de datos estándar del Portapapeles para aplicaciones OLE versión 1 y no OLE). En una transferencia de arrastrar y colocar, la aplicación llama a la funciónDoDragDrop en su lugar.
En el lado receptor de la transferencia, el destino recibe el IDataObject puntero como argumento para una invocación de IDropTarget::D rop o llamando a la función OleSetClipboard, dependiendo de si la transferencia es por medio de arrastrar y colocar o el Portapapeles. Después de obtener este puntero, el destino llama a IDataObject::EnumFormatEtc para saber qué formatos están disponibles para la recuperación y en qué tipos de medios se pueden obtener. Con esta información, la aplicación receptora solicita los datos con una llamada a IDataObject::GetData.