Compartir a través de


Clase COleDataSource

Actúa como una memoria caché donde una aplicación coloca los datos que proporcionará durante las operaciones de transferencia de datos, tales como las operaciones del Portapapeles y de arrastrar y colocar.

Sintaxis

class COleDataSource : public CCmdTarget

Miembros

Constructores públicos

Nombre Descripción
COleDataSource::COleDataSource Construye un objeto COleDataSource.

Métodos públicos

Nombre Descripción
COleDataSource::CacheData Ofrece los datos en un formato especificado mediante una estructura STGMEDIUM.
COleDataSource::CacheGlobalData Ofrece los datos en un formato especificado mediante un elemento HGLOBAL.
COleDataSource::DelayRenderData Ofrece los datos en un formato especificado mediante la representación diferida.
COleDataSource::DelayRenderFileData Ofrece los datos en un formato especificado en un puntero CFile.
COleDataSource::DelaySetData Se realiza una llamada para cada formato que se admite en OnSetData.
COleDataSource::DoDragDrop Realiza operaciones de arrastrar y colocar con un origen de datos.
COleDataSource::Empty Vacía el objeto de datos COleDataSource.
COleDataSource::FlushClipboard Representa todos los datos en el Portapapeles.
COleDataSource::GetClipboardOwner Comprueba que los datos colocados en el Portapapeles todavía estén allí.
COleDataSource::OnRenderData Recupera los datos como parte de la representación diferida.
COleDataSource::OnRenderFileData Recupera los datos en un elemento CFile como parte de la representación diferida.
COleDataSource::OnRenderGlobalData Recupera datos en un HGLOBAL como parte de la representación diferida.
COleDataSource::OnSetData Se le llama para reemplazar los datos del objeto COleDataSource.
COleDataSource::SetClipboard Coloca un objeto COleDataSource en el Portapapeles.

Comentarios

Puede crear orígenes de datos OLE directamente. Como alternativa, las clases COleClientItem y COleServerItem crean orígenes de datos OLE en respuesta a sus funciones miembro CopyToClipboard y DoDragDrop. Consulte COleServerItem::CopyToClipboard para obtener una breve descripción. Invalide la función miembro OnGetClipboardData de la clase del elemento de cliente o del elemento de servidor para agregar formatos de Portapapeles adicionales a los datos del origen de datos OLE creado por la función miembro CopyToClipboard o DoDragDrop.

Siempre que quiera preparar los datos para una transferencia, debe crear un objeto de esta clase y rellenarlo con los datos mediante el método más adecuado para los datos. La forma en la que se inserta en un origen de datos se ve directamente afectada en función de si los datos se proporcionan inmediatamente (representación inmediata) o a petición (representación diferida). Para cada formato de Portapapeles en el que se proporcionan datos pasando el formato de Portapapeles que se va a usar (y una estructura FORMATETC opcional), llame a DelayRenderData.

Para obtener más información acerca de los orígenes de datos y la transferencia de datos, consulte el artículo Objetos de datos y orígenes de datos (OLE). Además, el artículo Portapapeles describe el mecanismo del Portapapeles OLE.

Jerarquía de herencia

CObject

CCmdTarget

COleDataSource

Requisitos

Encabezado: afxole.h

COleDataSource::CacheData

Llame a esta función para especificar el formato en el que se ofrecen los datos durante las operaciones de transferencia de datos.

void CacheData(
    CLIPFORMAT cfFormat,
    LPSTGMEDIUM lpStgMedium,
    LPFORMATETC lpFormatEtc = NULL);

Parámetros

cfFormat
Formato de Portapapeles en el que se van a ofrecer los datos. Este parámetro puede ser uno de los formatos predefinidos del Portapapeles o el valor devuelto por la función RegisterClipboardFormat nativa de Windows.

lpStgMedium
Apunta a una estructura STGMEDIUM que contiene los datos en el formato especificado.

lpFormatEtc
Apunta a una estructura FORMATETC que describe el formato en el que se van a ofrecer los datos. Proporcione un valor para este parámetro si desea especificar información de formato adicional más allá del formato de Portapapeles especificado por cfFormat. Si es null, se usan los valores predeterminados para los demás campos de la estructuraFORMATETC.

Comentarios

Debe suministrar los datos, ya que esta función los proporciona mediante la representación inmediata. Los datos se almacenan en caché hasta que sean necesarios.

Proporcione los datos mediante una estructura STGMEDIUM. También puede usar la función miembro CacheGlobalData si la cantidad de datos que proporciona es lo suficientemente pequeña como para transferirse de forma eficaz mediante un elemento HGLOBAL.

Después de la llamada a CacheData, el miembro ptd de lpFormatEtc y el contenido de lpStgMedium son propiedad del objeto de datos, no del autor de la llamada.

Para usar la representación diferida, llame a la función miembro DelayRenderData o DelayRenderFileData. Para obtener más información sobre la representación diferida tal y como la controla MFC, consulte el artículo Objetos de datos y orígenes de datos: manipulación.

Para obtener más información, consulte las estructuras STGMEDIUM y FORMATETC en Windows SDK.

Para más información, consulte RegisterClipboardFormat en Windows SDK.

COleDataSource::CacheGlobalData

Llame a esta función para especificar el formato en el que se ofrecen los datos durante las operaciones de transferencia de datos.

void CacheGlobalData(
    CLIPFORMAT cfFormat,
    HGLOBAL hGlobal,
    LPFORMATETC lpFormatEtc = NULL);

Parámetros

cfFormat
Formato de Portapapeles en el que se van a ofrecer los datos. Este parámetro puede ser uno de los formatos predefinidos del Portapapeles o el valor devuelto por la función RegisterClipboardFormat nativa de Windows.

hGlobal
Manipulador del bloque de memoria global que contiene los datos en el formato especificado.

lpFormatEtc
Apunta a una estructura FORMATETC que describe el formato en el que se van a ofrecer los datos. Proporcione un valor para este parámetro si desea especificar información de formato adicional más allá del formato de Portapapeles especificado por cfFormat. Si es null, se usan los valores predeterminados para los demás campos de la estructuraFORMATETC.

Comentarios

Esta función proporciona los datos mediante la representación inmediata, por lo que debe suministrar los datos al llamar a la función; los datos se almacenan en caché hasta que sean necesarios. Use la función miembro CacheData si va a proporcionar una gran cantidad de datos o si necesita un medio de almacenamiento estructurado.

Para usar la representación diferida, llame a la función miembro DelayRenderData o DelayRenderFileData. Para obtener más información sobre la representación diferida tal y como la controla MFC, consulte el artículo Objetos de datos y orígenes de datos: manipulación.

Para más información, consulte la estructura FORMATETC en Windows SDK.

Para más información, consulte RegisterClipboardFormat en Windows SDK.

COleDataSource::COleDataSource

Construye un objeto COleDataSource.

COleDataSource();

COleDataSource::DelayRenderData

Llame a esta función para especificar el formato en el que se ofrecen los datos durante las operaciones de transferencia de datos.

void DelayRenderData(
    CLIPFORMAT cfFormat,
    LPFORMATETC lpFormatEtc = NULL);

Parámetros

cfFormat
Formato de Portapapeles en el que se van a ofrecer los datos. Este parámetro puede ser uno de los formatos predefinidos del Portapapeles o el valor devuelto por la función RegisterClipboardFormat nativa de Windows.

lpFormatEtc
Apunta a una estructura FORMATETC que describe el formato en el que se van a ofrecer los datos. Proporcione un valor para este parámetro si desea especificar información de formato adicional más allá del formato de Portapapeles especificado por cfFormat. Si es null, se usan los valores predeterminados para los demás campos de la estructuraFORMATETC.

Comentarios

Esta función proporciona los datos mediante la representación diferida, por lo que los datos no se proporcionan inmediatamente. Se llama a la función miembro OnRenderData u OnRenderGlobalData para solicitar los datos.

Use esta función si no va a proporcionar los datos mediante un objeto CFile. Si va a proporcionar los datos mediante un objeto CFile, llame a la función miembro DelayRenderFileData. Para obtener más información sobre la representación diferida tal y como la controla MFC, consulte el artículo Objetos de datos y orígenes de datos: manipulación.

Para usar la representación inmediata, llame a la función miembro CacheData o CacheGlobalData.

Para más información, consulte la estructura FORMATETC en Windows SDK.

Para más información, consulte RegisterClipboardFormat en Windows SDK.

COleDataSource::DelayRenderFileData

Llame a esta función para especificar el formato en el que se ofrecen los datos durante las operaciones de transferencia de datos.

void DelayRenderFileData(
    CLIPFORMAT cfFormat,
    LPFORMATETC lpFormatEtc = NULL);

Parámetros

cfFormat
Formato de Portapapeles en el que se van a ofrecer los datos. Este parámetro puede ser uno de los formatos predefinidos del Portapapeles o el valor devuelto por la función RegisterClipboardFormat nativa de Windows.

lpFormatEtc
Apunta a una estructura FORMATETC que describe el formato en el que se van a ofrecer los datos. Proporcione un valor para este parámetro si desea especificar información de formato adicional más allá del formato de Portapapeles especificado por cfFormat. Si es null, se usan los valores predeterminados para los demás campos de la estructuraFORMATETC.

Comentarios

Esta función proporciona los datos mediante la representación diferida, por lo que los datos no se proporcionan inmediatamente. Se llama a la función miembro OnRenderFileData para solicitar los datos.

Use esta función si va a usar un objeto CFile para proporcionar los datos. Si no va a usar un objeto CFile, llame a la función miembro DelayRenderData. Para obtener más información sobre la representación diferida tal y como la controla MFC, consulte el artículo Objetos de datos y orígenes de datos: manipulación.

Para usar la representación inmediata, llame a la función miembro CacheData o CacheGlobalData.

Para más información, consulte la estructura FORMATETC en Windows SDK.

Para más información, consulte RegisterClipboardFormat en Windows SDK.

COleDataSource::DelaySetData

Llame a esta función para admitir el cambio del contenido del origen de datos.

void DelaySetData(
    CLIPFORMAT cfFormat,
    LPFORMATETC lpFormatEtc = NULL);

Parámetros

cfFormat
Formato de Portapapeles en el que se van a colocar los datos. Este parámetro puede ser uno de los formatos predefinidos del Portapapeles o el valor devuelto por la función RegisterClipboardFormat nativa de Windows.

lpFormatEtc
Apunta a una estructura FORMATETC que describe el formato en el que se van a reemplazar los datos. Proporcione un valor para este parámetro si desea especificar información de formato adicional más allá del formato de Portapapeles especificado por cfFormat. Si es null, se usan los valores predeterminados para los demás campos de la estructuraFORMATETC.

Comentarios

El marco de trabajo llamará a OnSetData cuando esto suceda. Esto solo se usa cuando el marco de trabajo devuelve el origen de datos desde COleServerItem::GetDataSource. Si no se llama a DelaySetData, nunca se llamará a la función OnSetData. Se debe llamar a DelaySetData para cada formato de Portapapeles o FORMATETC que admita.

Para más información, consulte la estructura FORMATETC en Windows SDK.

Para más información, consulte RegisterClipboardFormat en Windows SDK.

COleDataSource::DoDragDrop

Llame a la DoDragDrop función miembro para realizar una operación de arrastrar y colocar para este origen de datos, normalmente en un controlador CWnd::OnLButtonDown .

DROPEFFECT DoDragDrop(
    DWORD dwEffects = DROPEFFECT_COPY|DROPEFFECT_MOVE|DROPEFFECT_LINK,
    LPCRECT lpRectStartDrag = NULL,
    COleDropSource* pDropSource = NULL);

Parámetros

dwEffects
Operaciones de arrastrar y colocar permitidas en este origen de datos. Puede ser una o varias de las siguientes:

  • DROPEFFECT_COPY Se podría realizar una operación de copia.

  • DROPEFFECT_MOVE Se podría realizar una operación de movimiento.

  • DROPEFFECT_LINK Se podría establecer un vínculo de los datos colocados a los datos originales.

  • DROPEFFECT_SCROLL Indica que se podría producir una operación de desplazamiento de arrastre.

lpRectStartDrag
Puntero al rectángulo que define dónde se inicia realmente el arrastre. Para obtener más información, vea la sección Comentarios que se muestra más adelante.

pDropSource
Apunta a un origen de colocación. Si es null, se usará una implementación predeterminada de COleDropSource.

Valor devuelto

Efecto de colocación generado por la operación de arrastrar y colocar; de lo contrario, DROPEFFECT_NONE si la operación nunca comienza porque el usuario ha liberado el botón del mouse antes de salir del rectángulo proporcionado.

Comentarios

La operación de arrastrar y colocar no se inicia inmediatamente. Espera hasta que el cursor del mouse salga del rectángulo especificado por lpRectStartDrag o hasta que haya transcurrido un número especificado de milisegundos. Si lpRectStartDrag es NULL, el tamaño del rectángulo es de un píxel.

El tiempo de retraso se especifica con una configuración de clave del Registro. Llame a CWinApp::WriteProfileString o CWinApp::WriteProfileInt para cambiar el tiempo de retraso. Si no especifica el tiempo de retraso, se usará un valor predeterminado de 200 milisegundos. El tiempo de retraso de arrastre se almacena de la siguiente manera:

  • El tiempo de retraso de arrastre de Windows NT se almacena en HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\NT\CurrentVersion\IniFileMapping\win.ini\Windows\DragDelay.

  • El tiempo de retraso de arrastre de Windows 3.x se almacena en el archivo WIN.INI, en la sección [Windows}.

  • El tiempo de retraso de arrastre de Windows 95/98 se almacena en una versión almacenada en caché de WIN.INI.

Para obtener más información sobre cómo se almacena la información de retraso de arrastre en el Registro o en el archivo .INI, consulte WriteProfileString en Windows SDK.

Para obtener más información, consulte el artículo Arrastrar y colocar en OLE.

COleDataSource::Empty

Llame a esta función para vaciar los datos del objeto COleDataSource.

void Empty();

Comentarios

Se vacían los formatos de representación diferida y almacenados en caché para que se puedan reutilizar.

Para obtener más información, consulte ReleaseStgMedium en Windows SDK.

COleDataSource::FlushClipboard

Representa los datos que están en el Portapapeles y le permite pegar los datos desde el Portapapeles después de que se cierre la aplicación.

static void PASCAL FlushClipboard();

Comentarios

Use SetClipboard para colocar los datos en el Portapapeles.

COleDataSource::GetClipboardOwner

Determina si los datos del Portapapeles han cambiado desde que se llamó por última vez a SetClipboard y, si es así, identifica al propietario actual.

static COleDataSource* PASCAL GetClipboardOwner();

Valor devuelto

Origen de datos que hay actualmente en el Portapapeles o NULL si no hay nada en el Portapapeles o si el Portapapeles no es propiedad de la aplicación que realiza la llamada.

COleDataSource::OnRenderData

El marco de trabajo llama a este método para recuperar datos en el formato especificado.

virtual BOOL OnRenderData(
    LPFORMATETC lpFormatEtc,
    LPSTGMEDIUM lpStgMedium);

Parámetros

lpFormatEtc
Apunta a la estructura FORMATETC que especifica el formato en el que se solicita la información.

lpStgMedium
Apunta a una estructura STGMEDIUM a la que se van a devolver los datos.

Valor devuelto

Si es correcta, su valor es distinto de cero. En caso contrario, es cero.

Comentarios

El formato especificado es uno colocado anteriormente en el objeto COleDataSource mediante las funciones miembro DelayRenderData o DelayRenderFileData para la representación diferida. La implementación predeterminada de esta función llama a OnRenderFileData o a OnRenderGlobalData si el medio de almacenamiento proporcionado es un archivo o la memoria, respectivamente. Si no se proporciona ninguno de estos formatos, la implementación predeterminada devolverá 0 y no hará nada. Para obtener más información sobre la representación diferida tal y como la controla MFC, consulte el artículo Objetos de datos y orígenes de datos: manipulación.

Si lpStgMedium->tymed es TYMED_NULL, se debe asignar y rellenar el elemento STGMEDIUM según lo especificado por lpFormatEtc->tymed. Si no es TYMED_NULL, el elemento STGMEDIUM se debe rellenar de forma local con los datos.

Se trata de una invalidación avanzada. Invalide esta función para proporcionar los datos en el formato y el medio solicitados. En función de los datos, es posible que se desee invalidar una de las otras versiones de esta función en su lugar. Si los datos son pequeños y fijos en su tamaño, invalide OnRenderGlobalData. Si los datos están en un archivo o tienen un tamaño variable, invalide OnRenderFileData.

Para obtener más información, consulte las estructuras STGMEDIUM y FORMATETC, el tipo de enumeración TYMED y el método IDataObject::GetData en Windows SDK.

COleDataSource::OnRenderFileData

El marco de trabajo llama a este método para recuperar los datos en el formato especificado cuando el medio de almacenamiento especificado es un archivo.

virtual BOOL OnRenderFileData(
    LPFORMATETC lpFormatEtc,
    CFile* pFile);

Parámetros

lpFormatEtc
Apunta a la estructura FORMATETC que especifica el formato en el que se solicita la información.

pFile
Apunta a un objeto CFile en el que se van a representar los datos.

Valor devuelto

Si es correcta, su valor es distinto de cero. En caso contrario, es cero.

Comentarios

El formato especificado es uno colocado anteriormente en el objeto COleDataSource mediante la función miembro DelayRenderData para la representación diferida. La implementación predeterminada de esta función devuelve FALSE.

Se trata de una invalidación avanzada. Invalide esta función para proporcionar los datos en el formato y el medio solicitados. En función de los datos, es posible que se desee invalidar una de las otras versiones de esta función en su lugar. Si desea controlar varios medios de almacenamiento, invalide OnRenderData. Si los datos están en un archivo o tienen un tamaño variable, invalide OnRenderFileData. Para obtener más información sobre la representación diferida tal y como la controla MFC, consulte el artículo Objetos de datos y orígenes de datos: manipulación.

Para obtener más información, consulte la estructura FORMATETC y IDataObject::GetData en Windows SDK.

COleDataSource::OnRenderGlobalData

El marco de trabajo llama a este método para recuperar los datos en el formato especificado cuando el medio de almacenamiento especificado es la memoria global.

virtual BOOL OnRenderGlobalData(
    LPFORMATETC lpFormatEtc,
    HGLOBAL* phGlobal);

Parámetros

lpFormatEtc
Apunta a la estructura FORMATETC que especifica el formato en el que se solicita la información.

phGlobal
Apunta a un manipulador de la memoria global en la que se van a devolver los datos. Si aún no se ha asignado uno, este parámetro puede ser NULL.

Valor devuelto

Si es correcta, su valor es distinto de cero. En caso contrario, es cero.

Comentarios

El formato especificado es uno colocado anteriormente en el objeto COleDataSource mediante la función miembro DelayRenderData para la representación diferida. La implementación predeterminada de esta función devuelve FALSE.

Si phGlobal es NULL, se debe asignar y devolver un nuevo elemento HGLOBAL en phGlobal. De lo contrario, el elemento HGLOBAL especificado por phGlobal se debe rellenar con los datos. La cantidad de datos colocados en HGLOBAL no debe superar el tamaño actual del bloque de memoria. Además, el bloque no se puede reasignar a un tamaño mayor.

Se trata de una invalidación avanzada. Invalide esta función para proporcionar los datos en el formato y el medio solicitados. En función de los datos, es posible que se desee invalidar una de las otras versiones de esta función en su lugar. Si desea controlar varios medios de almacenamiento, invalide OnRenderData. Si los datos están en un archivo o tienen un tamaño variable, invalide OnRenderFileData. Para obtener más información sobre la representación diferida tal y como la controla MFC, consulte el artículo Objetos de datos y orígenes de datos: manipulación.

Para obtener más información, consulte la estructura FORMATETC y IDataObject::GetData en Windows SDK.

COleDataSource::OnSetData

Lo llama el marco de trabajo para establecer o reemplazar los datos del objeto COleDataSource en el formato especificado.

virtual BOOL OnSetData(
    LPFORMATETC lpFormatEtc,
    LPSTGMEDIUM lpStgMedium,
    BOOL bRelease);

Parámetros

lpFormatEtc
Apunta a la estructura FORMATETC que especifica el formato en el que se van a reemplazar los datos.

lpStgMedium
Apunta a la estructura STGMEDIUM que contiene los datos que reemplazarán el contenido actual del objeto COleDataSource.

bRelease
Indica quién tiene la propiedad del medio de almacenamiento después de completar la llamada de función. El autor de la llamada decide quién es responsable de liberar los recursos asignados en nombre del medio de almacenamiento. El autor de la llamada lo hace estableciendo bRelease. Si bRelease es distinto de cero, el origen de datos se convierte en el propietario, liberando el medio cuando haya terminado de usarlo. Cuando bRelease es 0, el autor de la llamada conserva la propiedad y el origen de datos puede usar el medio de almacenamiento solo durante la llamada.

Valor devuelto

Si es correcta, su valor es distinto de cero. En caso contrario, es cero.

Comentarios

El origen de datos no se convierte en propietario de los datos hasta que los obtiene correctamente. Es decir, no se convierte en el propietario si OnSetData devuelve 0. Si el origen de datos se convierte en propietario, libera el medio de almacenamiento llamando a la función ReleaseStgMedium.

La implementación predeterminada no hace nada. Invalide esta función para reemplazar los datos en el formato especificado. Se trata de una invalidación avanzada.

Para obtener más información, consulte las estructuras STGMEDIUM y FORMATETC, y las funciones ReleaseStgMedium e IDataObject::GetData en Windows SDK.

COleDataSource::SetClipboard

Coloca los datos contenidos en el objeto COleDataSource en el Portapapeles después de llamar a una de las funciones siguientes: CacheData, CacheGlobalData, DelayRenderData o DelayRenderFileData.

void SetClipboard();

Consulte también

HIERSVR de muestra MFC
Ejemplo MFC de OCLIENT
CCmdTarget (clase)
Gráfico de jerarquías
COleDataObject (clase)