Persistence of OLE Controls
One capability of OLE controls is property persistence (or serialization), which allows the OLE control to read or write property values to and from a file or stream. A container application can use serialization to store a control's property values even after the application has destroyed the control. The property values of the OLE control can then be read from the file or stream when a new instance of the control is created at a later time.
Persistence of OLE Controls
Name | Description |
---|---|
PX_Blob | Exchanges a control property that stores binary large object (BLOB) data. |
PX_Bool | Exchanges a control property of type BOOL. |
PX_Color | Exchanges a color property of a control. |
PX_Currency | Exchanges a control property of type CY. |
PX_DataPath | Exchanges a control property of type CDataPathProperty . |
PX_Double | Exchanges a control property of type double . |
PX_Font | Exchanges a font property of a control. |
PX_Float | Exchanges a control property of type float . |
PX_IUnknown | Exchanges a control property of undefined type. |
PX_Long | Exchanges a control property of type long . |
PX_Picture | Exchanges a picture property of a control. |
PX_Short | Exchanges a control property of type short . |
PX_ULong | Exchanges a control property of type ULONG. |
PX_UShort | Exchanges a control property of type USHORT. |
PXstring | Exchanges a character string control property. |
PX_VBXFontConvert | Exchanges a VBX control's font-related properties into an OLE control font property. |
In addition, the AfxOleTypeMatchGuid
global function is provided to test for a match between a TYPEDESC and a given GUID.
PX_Blob
Call this function within your control's DoPropExchange
member function to serialize or initialize a property that stores binary large object (BLOB) data.
BOOL PX_Blob(
CPropExchange* pPX,
LPCTSTR pszPropName,
HGLOBAL& hBlob,
HGLOBAL hBlobDefault = NULL);
Parameters
pPX
Pointer to the CPropExchange object (typically passed as a parameter to DoPropExchange
).
pszPropName
The name of the property being exchanged.
hBlob
Reference to the variable where the property is stored (typically a member variable of your class).
hBlobDefault
Default value for the property.
Return Value
Nonzero if the exchange was successful; 0 if unsuccessful.
Remarks
The property's value will be read from or written to the variable referenced by hBlob, as appropriate. This variable should be initialized to NULL before initially calling PX_Blob
for the first time (typically, this can be done in the control's constructor). If hBlobDefault is specified, it will be used as the property's default value. This value is used if, for any reason, the control's initialization or serialization process fails.
The handles hBlob and hBlobDefault refer to a block of memory which contains the following:
A DWORD which contains the length, in bytes, of the binary data that follows, followed immediately by
A block of memory containing the actual binary data.
Note that PX_Blob
will allocate memory, using the Windows GlobalAlloc API, when loading BLOB-type properties. You are responsible for freeing this memory. Therefore, the destructor of your control should call GlobalFree on any BLOB-type property handles to free up any memory allocated to your control.
PX_Bool
Call this function within your control's DoPropExchange
member function to serialize or initialize a property of type BOOL.
BOOL PX_Bool(
CPropExchange* pPX,
LPCTSTR pszPropName,
BOOL& bValue);
BOOL PX_Bool(
CPropExchange* pPX,
LPCTSTR pszPropName,
BOOL& bValue,
BOOL bDefault);
Parameters
pPX
Pointer to the CPropExchange object (typically passed as a parameter to DoPropExchange
).
pszPropName
The name of the property being exchanged.
bValue
Reference to the variable where the property is stored (typically a member variable of your class).
bDefault
Default value for the property.
Return Value
Nonzero if the exchange was successful; 0 if unsuccessful.
Remarks
The property's value will be read from or written to the variable referenced by bValue, as appropriate. If bDefault is specified, it will be used as the property's default value. This value is used if, for any reason, the control's serialization process fails.
PX_Color
Call this function within your control's DoPropExchange
member function to serialize or initialize a property of type 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);
Parameters
pPX
Pointer to the CPropExchange object (typically passed as a parameter to DoPropExchange
).
pszPropName
The name of the property being exchanged.
clrValue
Reference to the variable where the property is stored (typically a member variable of your class).
clrDefault
Default value for the property, as defined by the control developer.
Return Value
Nonzero if the exchange was successful; 0 if unsuccessful.
Remarks
The property's value will be read from or written to the variable referenced by clrValue, as appropriate. If clrDefault is specified, it will be used as the property's default value. This value is used if, for any reason, the control's serialization process fails.
PX_Currency
Call this function within your control's DoPropExchange
member function to serialize or initialize a property of type currency.
BOOL PX_Currency(
CPropExchange* pPX,
LPCTSTR pszPropName,
CY& cyValue);
BOOL PX_Currency(
CPropExchange* pPX,
LPCTSTR pszPropName,
CY& cyValue,
CY cyDefault);
Parameters
pPX
Pointer to the CPropExchange object (typically passed as a parameter to DoPropExchange
).
pszPropName
The name of the property being exchanged.
cyValue
Reference to the variable where the property is stored (typically a member variable of your class).
cyDefault
Default value for the property.
Return Value
Nonzero if the exchange was successful; 0 if unsuccessful.
Remarks
The property's value will be read from or written to the variable referenced by cyValue, as appropriate. If cyDefault is specified, it will be used as the property's default value. This value is used if, for any reason, the control's serialization process fails.
PX_DataPath
Call this function within your control's DoPropExchange
member function to serialize or initialize a data path property of type CDataPathProperty.
BOOL PX_DataPath(
CPropExchange* pPX,
LPCTSTR pszPropName,
CDataPathProperty& dataPathProperty);
BOOL PX_DataPath(
CPropExchange* pPX,
CDataPathProperty& dataPathProperty);
Parameters
pPX
Pointer to the CPropExchange object (typically passed as a parameter to DoPropExchange
).
pszPropName
The name of the property being exchanged.
dataPathProperty
Reference to the variable where the property is stored (typically a member variable of your class).
Return Value
Nonzero if the exchange was successful; 0 if unsuccessful.
Remarks
Data path properties implement asynchronous control properties. The property's value will be read from or written to the variable referenced by dataPathProperty, as appropriate.
PX_Double
Call this function within your control's DoPropExchange
member function to serialize or initialize a property of type double
.
BOOL PX_Double(
CPropExchange* pPX,
LPCTSTR pszPropName,
double& doubleValue);
BOOL PX_Double(
CPropExchange* pPX,
LPCTSTR pszPropName,
double& doubleValue,
double doubleDefault);
Parameters
pPX
Pointer to the CPropExchange object (typically passed as a parameter to DoPropExchange
).
pszPropName
The name of the property being exchanged.
doubleValue
Reference to the variable where the property is stored (typically a member variable of your class).
doubleDefault
Default value for the property.
Return Value
Nonzero if the exchange was successful; 0 if unsuccessful.
Remarks
The property's value is read from or written to the variable referenced by doubleValue, as appropriate. If doubleDefault is specified, it will be used as the property's default value. This value is used if, for any reason, the control's serialization process fails.
PX_Font
Call this function within your control's DoPropExchange
member function to serialize or initialize a property of type font.
BOOL PX_Font(
CPropExchange* pPX,
LPCTSTR pszPropName,
CFontHolder& font,
const FONTDESC FAR* pFontDesc = NULL,
LPFONTDISP pFontDispAmbient = NULL);
Parameters
pPX
Pointer to the CPropExchange object (typically passed as a parameter to DoPropExchange
).
pszPropName
The name of the property being exchanged.
font
A reference to a CFontHolder
object that contains the font property.
pFontDesc
A pointer to a FONTDESC
structure containing the values to use in initializing the default state of the font property, in the case where pFontDispAmbient is NULL.
pFontDispAmbient
A pointer to the IFontDisp
interface of a font to use in initializing the default state of the font property.
Return Value
Nonzero if the exchange was successful; 0 if unsuccessful.
Remarks
The property's value is read from or written to font
, a CFontHolder
reference, when appropriate. If pFontDesc and pFontDispAmbient are specified, they are used for initializing the property's default value, when needed. These values are used if, for any reason, the control's serialization process fails. Typically, you pass NULL for pFontDesc and the ambient value returned by COleControl::AmbientFont
for pFontDispAmbient. Note that the font object returned by COleControl::AmbientFont
must be released by a call to the IFontDisp::Release
member function.
PX_Float
Call this function within your control's DoPropExchange
member function to serialize or initialize a property of type float
.
BOOL PX_Float(
CPropExchange* pPX,
LPCTSTR pszPropName,
float& floatValue);
BOOL PX_Float(
CPropExchange* pPX,
LPCTSTR pszPropName,
float& floatValue,
float floatDefault);
Parameters
pPX
Pointer to the CPropExchange object (typically passed as a parameter to DoPropExchange
).
pszPropName
The name of the property being exchanged.
floatValue
Reference to the variable where the property is stored (typically a member variable of your class).
floatDefault
Default value for the property.
Return Value
Nonzero if the exchange was successful; 0 if unsuccessful.
Remarks
The property's value is read from or written to the variable referenced by floatValue, as appropriate. If floatDefault is specified, it will be used as the property's default value. This value is used if, for any reason, the control's serialization process fails.
PX_IUnknown
Call this function within your control's DoPropExchange
member function to serialize or initialize a property represented by an object having an IUnknown
-derived interface.
BOOL PX_IUnknown(
CPropExchange* pPX,
LPCTSTR pszPropName,
LPUNKNOWN& pUnk,
REFIID iid,
LPUNKNOWN pUnkDefault = NULL);
Parameters
pPX
Pointer to the CPropExchange object (typically passed as a parameter to DoPropExchange
).
pszPropName
The name of the property being exchanged.
pUnk
Reference to a variable containing the interface of the object that represents the value of the property.
iid
An interface ID indicating which interface of the property object is used by the control.
pUnkDefault
Default value for the property.
Return Value
Nonzero if the exchange was successful; 0 if unsuccessful.
Remarks
The property's value is read from or written to the variable referenced by pUnk, as appropriate. If pUnkDefault is specified, it will be used as the property's default value. This value is used if, for any reason, the control's serialization process fails.
PX_Long
Call this function within your control's DoPropExchange
member function to serialize or initialize a property of type long
.
BOOL PX_Long(
CPropExchange* pPX,
LPCTSTR pszPropName,
long& lValue);
BOOL PX_Long(
CPropExchange* pPX,
LPCTSTR pszPropName,
long& lValue,
long lDefault);
Parameters
pPX
Pointer to the CPropExchange object (typically passed as a parameter to DoPropExchange
).
pszPropName
The name of the property being exchanged.
lValue
Reference to the variable where the property is stored (typically a member variable of your class).
lDefault
Default value for the property.
Return Value
Nonzero if the exchange was successful; 0 if unsuccessful.
Remarks
The property's value is read from or written to the variable referenced by lValue, as appropriate. If lDefault is specified, it will be used as the property's default value. This value is used if, for any reason, the control's serialization process fails.
PX_Picture
Call this function within your control's DoPropExchange
member function to serialize or initialize a picture property of your control.
BOOL PX_Picture(
CPropExchange* pPX,
LPCTSTR pszPropName,
CPictureHolder& pict);
BOOL PX_Picture(
CPropExchange* pPX,
LPCTSTR pszPropName,
CPictureHolder& pict,
CPictureHolder& pictDefault);
Parameters
pPX
Pointer to the CPropExchange object (typically passed as a parameter to DoPropExchange
).
pszPropName
The name of the property being exchanged.
pict
Reference to a CPictureHolder object where the property is stored (typically a member variable of your class).
pictDefault
Default value for the property.
Return Value
Nonzero if the exchange was successful; 0 if unsuccessful.
Remarks
The property's value is read from or written to the variable referenced by pict, as appropriate. If pictDefault is specified, it will be used as the property's default value. This value is used if, for any reason, the control's serialization process fails.
PX_Short
Call this function within your control's DoPropExchange
member function to serialize or initialize a property of type short
.
BOOL PX_Short(
CPropExchange* pPX,
LPCTSTR pszPropName,
short& sValue);
BOOL PX_Short(
CPropExchange* pPX,
LPCTSTR pszPropName,
short& sValue,
short sDefault);
Parameters
pPX
Pointer to the CPropExchange object (typically passed as a parameter to DoPropExchange
).
pszPropName
The name of the property being exchanged.
sValue
Reference to the variable where the property is stored (typically a member variable of your class).
sDefault
Default value for the property.
Return Value
Nonzero if the exchange was successful; 0 if unsuccessful.
Remarks
The property's value is read from or written to the variable referenced by sValue, as appropriate. If sDefault is specified, it will be used as the property's default value. This value is used if, for any reason, the control's serialization process fails.
PX_ULong
Call this function within your control's DoPropExchange
member function to serialize or initialize a property of type ULONG.
BOOL PX_ULong(
CPropExchange* pPX,
LPCTSTR pszPropName,
ULONG& ulValue);
BOOL PX_ULong(
CPropExchange* pPX,
LPCTSTR pszPropName,
ULONG& ulValue,
long ulDefault);
Parameters
pPX
Pointer to the CPropExchange object (typically passed as a parameter to DoPropExchange
).
pszPropName
Name of the property being exchanged.
ulValue
Reference to the variable where the property is stored (typically a member variable of your class).
ulDefault
Default value for the property.
Return Value
Nonzero if the exchange was successful; 0 if unsuccessful.
Remarks
The property's value is read from or written to the variable referenced by ulValue, as appropriate. If ulDefault is specified, it will be used as the property's default value. This value is used if, for any reason, the control's serialization process fails.
PX_UShort
Call this function within your control's DoPropExchange
member function to serialize or initialize a property of type unsigned short
.
BOOL PX_UShort(
CPropExchange* pPX,
LPCTSTR pszPropName,
USHORT& usValue);
BOOL PX_UShort(
CPropExchange* pPX,
LPCTSTR pszPropName,
USHORT& usValue,
USHORT usDefault);
Parameters
pPX
Pointer to the CPropExchange object (typically passed as a parameter to DoPropExchange
).
pszPropName
Name of the property being exchanged.
usValue
Reference to the variable where the property is stored (typically a member variable of your class).
usDefault
Default value for the property.
Return Value
Nonzero if the exchange was successful; 0 if unsuccessful.
Remarks
The property's value is read from or written to the variable referenced by usValue, as appropriate. If usDefault is specified, it will be used as the property's default value. This value is used if, for any reason, the control's serialization process fails.
PXstring
Call this function within your control's DoPropExchange
member function to serialize or initialize a character string property.
BOOL PXstring(
CPropExchange* pPX,
LPCTSTR pszPropName,
CString& strValue);
BOOL PXstring(
CPropExchange* pPX,
LPCTSTR pszPropName,
CString& strValue,
CString strDefault);
Parameters
pPX
Pointer to the CPropExchange object (typically passed as a parameter to DoPropExchange
).
pszPropName
The name of the property being exchanged.
strValue
Reference to the variable where the property is stored (typically a member variable of your class).
strDefault
Default value for the property.
Return Value
Nonzero if the exchange was successful; 0 if unsuccessful.
Remarks
The property's value is read from or written to the variable referenced by strValue, as appropriate. If strDefault is specified, it will be used as the property's default value. This value is used if, for any reason, the control's serialization process fails.
PX_VBXFontConvert
Call this function within your control's DoPropExchange
member function to initialize a font property by converting a VBX control's font-related properties.
BOOL PX_VBXFontConvert(
CPropExchange* pPX,
CFontHolder& font);
Parameters
pPX
Pointer to the CPropExchange object (typically passed as a parameter to DoPropExchange
).
font
The font property of the OLE control that will contain the converted VBX font-related properties.
Return Value
Nonzero if the exchange was successful; 0 if unsuccessful.
Remarks
This function should be used only by an OLE control that is designed as a direct replacement for a VBX control. When the Visual Basic development environment converts a form containing a VBX control to use the corresponding replacement OLE control, it will call the control's IDataObject::SetData
function, passing in a property set that contains the VBX control's property data. This operation, in turn, causes the control's DoPropExchange
function to be invoked. DoPropExchange
can call PX_VBXFontConvert
to convert the VBX control's font-related properties (for example, "FontName," "FontSize," and so on) into the corresponding components of the OLE control's font property.
PX_VBXFontConvert
should only be called when the control is actually being converted from a VBX form application. For example:
void CMFCActiveXControlCtrl::DoPropExchange(CPropExchange* pPX)
{
ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
COleControl::DoPropExchange(pPX);
if (IsConvertingVBX())
PX_VBXFontConvert(pPX, InternalGetFont());
}