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());
}