Compartir a través de


Persistencia de los controles OLE

Una funcionalidad de los controles OLE es la persistencia de propiedades (o la serialización), lo que permite que el control OLE lea o escriba valores de propiedad hacia y desde un archivo o secuencia. Una aplicación contenedora puede usar la serialización para almacenar los valores de propiedad de un control incluso después de que la aplicación haya destruido el control. Los valores de propiedad del control OLE se pueden leer desde el archivo o la secuencia cuando se crea una nueva instancia del control más adelante.

Persistencia de los controles OLE

Nombre Descripción
PX_Blob Intercambia una propiedad de control que almacena datos de objetos binarios grandes (BLOB).
PX_Bool Intercambia una propiedad de control de tipo BOOL.
PX_Color Intercambia una propiedad de color de un control.
PX_Currency Intercambia una propiedad de control de tipo CY.
PX_DataPath Intercambia una propiedad de control de tipo CDataPathProperty.
PX_Double Intercambia una propiedad de control de tipo double.
PX_Font Intercambia una propiedad de fuente de un control.
PX_Float Intercambia una propiedad de control de tipo float.
PX_IUnknown Intercambia una propiedad de control de tipo indefinido.
PX_Long Intercambia una propiedad de control de tipo long.
PX_Picture Intercambia una propiedad de imagen de un control.
PX_Short Intercambia una propiedad de control de tipo short.
PX_ULong Intercambia una propiedad de control de tipo ULONG.
PX_UShort Intercambia una propiedad de control de tipo USHORT.
PXstring Intercambia una propiedad de control de cadena de caracteres.
PX_VBXFontConvert Intercambia las propiedades relacionadas con fuentes de un control VBX en una propiedad de fuente del control OLE.

Además, se proporciona la función global AfxOleTypeMatchGuid para probar una coincidencia entre un TYPEDESC y un GUID determinado.

PX_Blob

Llame a esta función dentro de la función miembro de su control DoPropExchange para serializar o inicializar una propiedad que almacena datos binarios de objetos grandes (BLOB).

BOOL PX_Blob(
    CPropExchange* pPX,
    LPCTSTR pszPropName,
    HGLOBAL& hBlob,
    HGLOBAL hBlobDefault = NULL);

Parámetros

pPX
Puntero al objeto CPropExchange (normalmente se pasa como parámetro a DoPropExchange).

pszPropName
El nombre de la propiedad que se va a intercambiar.

hBlob
Referencia a la variable donde se almacena la propiedad (normalmente una variable miembro de la clase).

hBlobDefault
Valor predeterminado de la propiedad.

Valor devuelto

Distinto de cero si el intercambio se ha realizado correctamente; 0 si no se realiza correctamente.

Comentarios

El valor de la propiedad se lee o se escribe, según corresponda, en la variable a la que hace referencia hBlob. Esta variable se debe inicializar en NULL antes de llamar inicialmente a PX_Blob por primera vez (normalmente, esto se puede hacer en el constructor del control). Si se especificahBlobDefault, se usará como valor predeterminado de la propiedad. Este valor se usa si, por cualquier motivo, se produce un error en el proceso de inicialización o serialización del control.

Los identificadores hBlob y hBlobDefault hacen referencia a un bloque de memoria que contiene lo siguiente:

  • Un DWORD que contiene la longitud, en bytes, de los datos binarios siguientes, seguidos inmediatamente de

  • Un bloque de memoria que contiene los datos binarios reales.

Tenga en cuenta que PX_Blob asignará memoria, mediante la API GlobalAlloc de Windows, al cargar propiedades de tipo BLOB. Usted es responsable de liberar esta memoria. Por lo tanto, el destructor del control debe llamar a GlobalFree en cualquier identificador de propiedad de tipo BLOB para liberar cualquier memoria asignada al control.

PX_Bool

Llame a esta función dentro de la función miembro DoPropExchange del control para serializar o inicializar una propiedad de tipo BOOL.

BOOL PX_Bool(
    CPropExchange* pPX,
    LPCTSTR pszPropName,
    BOOL& bValue);

BOOL PX_Bool(
    CPropExchange* pPX,
    LPCTSTR pszPropName,
    BOOL& bValue,
    BOOL bDefault);

Parámetros

pPX
Puntero al objeto CPropExchange (normalmente se pasa como parámetro a DoPropExchange).

pszPropName
El nombre de la propiedad que se va a intercambiar.

bValue
Referencia a la variable donde se almacena la propiedad (normalmente una variable miembro de la clase).

bDefault
Valor predeterminado de la propiedad.

Valor devuelto

Distinto de cero si el intercambio se ha realizado correctamente; 0 si no se realiza correctamente.

Comentarios

El valor de la propiedad se lee o se escribe, según corresponda, en la variable a la que hace referencia bValue. Si se especifica bDefault, se usará como valor predeterminado de la propiedad. Este valor se usa si, por cualquier motivo, se produce un error en la serialización del control.

PX_Color

Llame a esta función dentro de la función miembro DoPropExchange del control para serializar o inicializar una propiedad de tipo OLE_COLOR.

BOOL PX_Color(
    CPropExchange* pPX,
    LPCTSTR pszPropName,
    OLE_COLOR& clrValue);

BOOL PX_Color(
    CPropExchange* pPX,
    LPCTSTR pszPropName,
    OLE_COLOR& clrValue,
    OLE_COLOR clrDefault);

Parámetros

pPX
Puntero al objeto CPropExchange (normalmente se pasa como parámetro a DoPropExchange).

pszPropName
El nombre de la propiedad que se va a intercambiar.

clrValue
Referencia a la variable donde se almacena la propiedad (normalmente una variable miembro de la clase).

clrDefault
Valor predeterminado de la propiedad, tal y como lo define el desarrollador del control.

Valor devuelto

Distinto de cero si el intercambio se ha realizado correctamente; 0 si no se realiza correctamente.

Comentarios

El valor de la propiedad se lee o se escribe, según corresponda, en la variable a la que hace referencia clrValue. Si se especifica clrDefault, se usará como valor predeterminado de la propiedad. Este valor se usa si, por cualquier motivo, se produce un error en la serialización del control.

PX_Currency

Llame a esta función dentro de la función miembro DoPropExchange del control para serializar o inicializar una propiedad de tipo moneda.

BOOL PX_Currency(
    CPropExchange* pPX,
    LPCTSTR pszPropName,
    CY& cyValue);

BOOL PX_Currency(
    CPropExchange* pPX,
    LPCTSTR pszPropName,
    CY& cyValue,
    CY cyDefault);

Parámetros

pPX
Puntero al objeto CPropExchange (normalmente se pasa como parámetro a DoPropExchange).

pszPropName
El nombre de la propiedad que se va a intercambiar.

cyValue
Referencia a la variable donde se almacena la propiedad (normalmente una variable miembro de la clase).

cyDefault
Valor predeterminado de la propiedad.

Valor devuelto

Distinto de cero si el intercambio se ha realizado correctamente; 0 si no se realiza correctamente.

Comentarios

El valor de la propiedad se lee o se escribe, según corresponda, en la variable a la que hace referencia cyValue. Si se especifica cyDefault, se usará como valor predeterminado de la propiedad. Este valor se usa si, por cualquier motivo, se produce un error en la serialización del control.

PX_DataPath

Llame a esta función dentro de la función miembro DoPropExchange del control para serializar o inicializar una propiedad de ruta de acceso de datos de tipo CDataPathProperty.

BOOL PX_DataPath(
    CPropExchange* pPX,
    LPCTSTR pszPropName,
    CDataPathProperty& dataPathProperty);

BOOL PX_DataPath(
    CPropExchange* pPX,
    CDataPathProperty& dataPathProperty);

Parámetros

pPX
Puntero al objeto CPropExchange (normalmente se pasa como parámetro a DoPropExchange).

pszPropName
El nombre de la propiedad que se va a intercambiar.

dataPathProperty
Referencia a la variable donde se almacena la propiedad (normalmente una variable miembro de la clase).

Valor devuelto

Distinto de cero si el intercambio se ha realizado correctamente; 0 si no se realiza correctamente.

Comentarios

Las propiedades de ruta de acceso de datos implementan propiedades de control asincrónicas. El valor de la propiedad se lee o se escribe, según corresponda, en la variable a la que hace referencia dataPathProperty.

PX_Double

Llame a esta función dentro de la función miembro DoPropExchange del control para serializar o inicializar una propiedad de tipo double.

BOOL PX_Double(
    CPropExchange* pPX,
    LPCTSTR pszPropName,
    double& doubleValue);

BOOL PX_Double(
    CPropExchange* pPX,
    LPCTSTR pszPropName,
    double& doubleValue,
    double doubleDefault);

Parámetros

pPX
Puntero al objeto CPropExchange (normalmente se pasa como parámetro a DoPropExchange).

pszPropName
El nombre de la propiedad que se va a intercambiar.

doubleValue
Referencia a la variable donde se almacena la propiedad (normalmente una variable miembro de la clase).

doubleDefault
Valor predeterminado de la propiedad.

Valor devuelto

Distinto de cero si el intercambio se ha realizado correctamente; 0 si no se realiza correctamente.

Comentarios

El valor de la propiedad se lee o se escribe, según corresponda, en la variable a la que hace referencia doubleValue. Si se especifica doubleDefault, se usará como valor predeterminado de la propiedad. Este valor se usa si, por cualquier motivo, se produce un error en la serialización del control.

PX_Font

Llame a esta función dentro de la función miembro DoPropExchange del control para serializar o inicializar una propiedad de tipo fuente.

BOOL PX_Font(
    CPropExchange* pPX,
    LPCTSTR pszPropName,
    CFontHolder& font,
    const FONTDESC FAR* pFontDesc = NULL,
    LPFONTDISP pFontDispAmbient = NULL);

Parámetros

pPX
Puntero al objeto CPropExchange (normalmente se pasa como parámetro a DoPropExchange).

pszPropName
El nombre de la propiedad que se va a intercambiar.

font
Referencia a un objeto CFontHolder que contiene la propiedad de fuente.

pFontDesc
Puntero a una FONTDESC estructura que contiene los valores que se van a usar para inicializar el estado predeterminado de la propiedad de fuente, en el caso de que pFontDispAmbient sea NULL.

pFontDispAmbient
Puntero a la interfaz IFontDisp de una fuente que se va a usar para inicializar el estado predeterminado de la propiedad de fuente.

Valor devuelto

Distinto de cero si el intercambio se ha realizado correctamente; 0 si no se realiza correctamente.

Comentarios

El valor de la propiedad se lee o se escribe en font, una referencia CFontHolder, cuando corresponda. Si se especifican pFontDesc y pFontDispAmbient, se usan para inicializar el valor predeterminado de la propiedad, cuando sea necesario. Estos valores se usan si, por cualquier motivo, se produce un error en la serialización del control. Normalmente, se pasa NULL para pFontDesc y el valor ambiente devuelto por COleControl::AmbientFont para pFontDispAmbient. Tenga en cuenta que el objeto de fuente devuelto por COleControl::AmbientFont debe liberarse mediante una llamada a la función miembro IFontDisp::Release.

PX_Float

Llame a esta función dentro de la función miembro DoPropExchange del control para serializar o inicializar una propiedad de tipo float.

BOOL PX_Float(
    CPropExchange* pPX,
    LPCTSTR pszPropName,
    float& floatValue);

BOOL PX_Float(
    CPropExchange* pPX,
    LPCTSTR pszPropName,
    float& floatValue,
    float floatDefault);

Parámetros

pPX
Puntero al objeto CPropExchange (normalmente se pasa como parámetro a DoPropExchange).

pszPropName
El nombre de la propiedad que se va a intercambiar.

floatValue
Referencia a la variable donde se almacena la propiedad (normalmente una variable miembro de la clase).

floatDefault
Valor predeterminado de la propiedad.

Valor devuelto

Distinto de cero si el intercambio se ha realizado correctamente; 0 si no se realiza correctamente.

Comentarios

El valor de la propiedad se lee o se escribe, según corresponda, en la variable a la que hace referencia floatValue. Si se especifica floatDefault, se usará como valor predeterminado de la propiedad. Este valor se usa si, por cualquier motivo, se produce un error en la serialización del control.

PX_IUnknown

Llame a esta función dentro de la función miembro DoPropExchange del control para serializar o inicializar una propiedad representada por un objeto que tiene una interfaz derivada de IUnknown.

BOOL PX_IUnknown(
    CPropExchange* pPX,
    LPCTSTR pszPropName,
    LPUNKNOWN& pUnk,
    REFIID iid,
    LPUNKNOWN pUnkDefault = NULL);

Parámetros

pPX
Puntero al objeto CPropExchange (normalmente se pasa como parámetro a DoPropExchange).

pszPropName
El nombre de la propiedad que se va a intercambiar.

pUnk
Referencia a una variable que contiene la interfaz del objeto que representa el valor de la propiedad.

iid
Identificador de interfaz que indica qué interfaz del objeto de propiedad usa el control.

pUnkDefault
Valor predeterminado de la propiedad.

Valor devuelto

Distinto de cero si el intercambio se ha realizado correctamente; 0 si no se realiza correctamente.

Comentarios

El valor de la propiedad se lee o se escribe, según corresponda, en la variable a la que hace referencia pUnk. Si se especifica pUnkDefault, se usará como valor predeterminado de la propiedad. Este valor se usa si, por cualquier motivo, se produce un error en la serialización del control.

PX_Long

Llame a esta función dentro de la función miembro DoPropExchange del control para serializar o inicializar una propiedad de tipo long.

BOOL PX_Long(
    CPropExchange* pPX,
    LPCTSTR pszPropName,
    long& lValue);

BOOL PX_Long(
    CPropExchange* pPX,
    LPCTSTR pszPropName,
    long& lValue,
    long lDefault);

Parámetros

pPX
Puntero al objeto CPropExchange (normalmente se pasa como parámetro a DoPropExchange).

pszPropName
El nombre de la propiedad que se va a intercambiar.

lValue
Referencia a la variable donde se almacena la propiedad (normalmente una variable miembro de la clase).

lDefault
Valor predeterminado de la propiedad.

Valor devuelto

Distinto de cero si el intercambio se ha realizado correctamente; 0 si no se realiza correctamente.

Comentarios

El valor de la propiedad se lee o se escribe, según corresponda, en la variable a la que hace referencia lValue. Si se especifica lDefault, se usará como valor predeterminado de la propiedad. Este valor se usa si, por cualquier motivo, se produce un error en la serialización del control.

PX_Picture

Llame a esta función dentro de la función miembro DoPropExchange del control para serializar o inicializar una propiedad de imagen del control.

BOOL PX_Picture(
    CPropExchange* pPX,
    LPCTSTR pszPropName,
    CPictureHolder& pict);

BOOL PX_Picture(
    CPropExchange* pPX,
    LPCTSTR pszPropName,
    CPictureHolder& pict,
    CPictureHolder& pictDefault);

Parámetros

pPX
Puntero al objeto CPropExchange (normalmente se pasa como parámetro a DoPropExchange).

pszPropName
El nombre de la propiedad que se va a intercambiar.

pict
Referencia al objeto CPictureHolder donde se almacena la propiedad (normalmente una variable miembro de la clase).

pictDefault
Valor predeterminado de la propiedad.

Valor devuelto

Distinto de cero si el intercambio se ha realizado correctamente; 0 si no se realiza correctamente.

Comentarios

El valor de la propiedad se lee o se escribe, según corresponda, en la variable a la que hace referencia pict. Si se especifica pictDefault, se usará como valor predeterminado de la propiedad. Este valor se usa si, por cualquier motivo, se produce un error en la serialización del control.

PX_Short

Llame a esta función dentro de la función miembro DoPropExchange del control para serializar o inicializar una propiedad de tipo short.

BOOL PX_Short(
    CPropExchange* pPX,
    LPCTSTR pszPropName,
    short& sValue);

BOOL PX_Short(
    CPropExchange* pPX,
    LPCTSTR pszPropName,
    short& sValue,
    short sDefault);

Parámetros

pPX
Puntero al objeto CPropExchange (normalmente se pasa como parámetro a DoPropExchange).

pszPropName
El nombre de la propiedad que se va a intercambiar.

sValue
Referencia a la variable donde se almacena la propiedad (normalmente una variable miembro de la clase).

sDefault
Valor predeterminado de la propiedad.

Valor devuelto

Distinto de cero si el intercambio se ha realizado correctamente; 0 si no se realiza correctamente.

Comentarios

El valor de la propiedad se lee o se escribe, según corresponda, en la variable a la que hace referencia sValue. Si se especifica sDefault, se usará como valor predeterminado de la propiedad. Este valor se usa si, por cualquier motivo, se produce un error en la serialización del control.

PX_ULong

Llame a esta función dentro de la función miembro DoPropExchange del control para serializar o inicializar una propiedad de tipo ULONG.

BOOL PX_ULong(
    CPropExchange* pPX,
    LPCTSTR pszPropName,
    ULONG& ulValue);

BOOL PX_ULong(
    CPropExchange* pPX,
    LPCTSTR pszPropName,
    ULONG& ulValue,
    long ulDefault);

Parámetros

pPX
Puntero al objeto CPropExchange (normalmente se pasa como parámetro a DoPropExchange).

pszPropName
El nombre de la propiedad que se va a intercambiar.

ulValue
Referencia a la variable donde se almacena la propiedad (normalmente una variable miembro de la clase).

ulDefault
Valor predeterminado de la propiedad.

Valor devuelto

Distinto de cero si el intercambio se ha realizado correctamente; 0 si no se realiza correctamente.

Comentarios

El valor de la propiedad se lee o se escribe, según corresponda, en la variable a la que hace referencia ulValue. Si se especifica ulDefault, se usará como valor predeterminado de la propiedad. Este valor se usa si, por cualquier motivo, se produce un error en la serialización del control.

PX_UShort

Llame a esta función dentro de la función miembro DoPropExchange del control para serializar o inicializar una propiedad de tipo unsigned short.

BOOL PX_UShort(
    CPropExchange* pPX,
    LPCTSTR pszPropName,
    USHORT& usValue);

BOOL PX_UShort(
    CPropExchange* pPX,
    LPCTSTR pszPropName,
    USHORT& usValue,
    USHORT usDefault);

Parámetros

pPX
Puntero al objeto CPropExchange (normalmente se pasa como parámetro a DoPropExchange).

pszPropName
El nombre de la propiedad que se va a intercambiar.

usValue
Referencia a la variable donde se almacena la propiedad (normalmente una variable miembro de la clase).

usDefault
Valor predeterminado de la propiedad.

Valor devuelto

Distinto de cero si el intercambio se ha realizado correctamente; 0 si no se realiza correctamente.

Comentarios

El valor de la propiedad se lee o se escribe, según corresponda, en la variable a la que hace referencia usValue. Si se especifica usDefault, se usará como valor predeterminado de la propiedad. Este valor se usa si, por cualquier motivo, se produce un error en la serialización del control.

PXstring

Llame a esta función dentro de la función miembro DoPropExchange del control para serializar o inicializar una propiedad de cadena de caracteres.

BOOL PXstring(
    CPropExchange* pPX,
    LPCTSTR pszPropName,
    CString& strValue);

BOOL PXstring(
    CPropExchange* pPX,
    LPCTSTR pszPropName,
    CString& strValue,
    CString strDefault);

Parámetros

pPX
Puntero al objeto CPropExchange (normalmente se pasa como parámetro a DoPropExchange).

pszPropName
El nombre de la propiedad que se va a intercambiar.

strValue
Referencia a la variable donde se almacena la propiedad (normalmente una variable miembro de la clase).

strDefault
Valor predeterminado de la propiedad.

Valor devuelto

Distinto de cero si el intercambio se ha realizado correctamente; 0 si no se realiza correctamente.

Comentarios

El valor de la propiedad se lee o se escribe, según corresponda, en la variable a la que hace referencia strValue. Si se especifica strDefault, se usará como valor predeterminado de la propiedad. Este valor se usa si, por cualquier motivo, se produce un error en la serialización del control.

PX_VBXFontConvert

Llame a esta función dentro de la función miembro DoPropExchange del control para inicializar una propiedad de fuente mediante la conversión de las propiedades relacionadas con fuentes de un control VBX.

BOOL PX_VBXFontConvert(
    CPropExchange* pPX,
    CFontHolder& font);

Parámetros

pPX
Puntero al objeto CPropExchange (normalmente se pasa como parámetro a DoPropExchange).

font
La propiedad font del control OLE que contendrá las propiedades relacionadas con fuentes VBX convertidas.

Valor devuelto

Distinto de cero si el intercambio se ha realizado correctamente; 0 si no se realiza correctamente.

Comentarios

Esta función solo debe usarse mediante un control OLE diseñado como reemplazo directo de un control VBX. Cuando el entorno de desarrollo de Visual Basic convierte un formulario que contiene un control VBX para usar el control OLE de reemplazo correspondiente, llamará a la función IDataObject::SetData del control, pasando un conjunto de propiedades que contenga los datos de propiedad del control VBX. Esta operación, a su vez, hace que se invoque la función DoPropExchange del control. DoPropExchange puede llamar a PX_VBXFontConvert para convertir las propiedades relacionadas con fuentes del control VBX (por ejemplo, "FontName", "FontSize", etc.) en los componentes correspondientes de la propiedad de fuente del control OLE.

PX_VBXFontConvert solo se debe llamar cuando el control se convierte realmente desde una aplicación de formulario VBX. Por ejemplo:

void CMFCActiveXControlCtrl::DoPropExchange(CPropExchange* pPX)
{
   ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
   COleControl::DoPropExchange(pPX);

   if (IsConvertingVBX())
      PX_VBXFontConvert(pPX, InternalGetFont());
}

Consulte también

Macros y globales