CPropExchange 类
支持 OLE 控件持久性的实现。
语法
class AFX_NOVTABLE CPropExchange
成员
公共方法
名称 | 描述 |
---|---|
CPropExchange::ExchangeBlobProp | 交换二进制大型对象 (BLOB) 属性。 |
CPropExchange::ExchangeFontProp | 交换 font 属性。 |
CPropExchange::ExchangePersistentProp | 在控件和文件之间交换属性。 |
CPropExchange::ExchangeProp | 交换任何内置类型的属性。 |
CPropExchange::ExchangeVersion | 交换 OLE 控件的版本号。 |
CPropExchange::GetVersion | 检索 OLE 控件的版本号。 |
CPropExchange::IsAsynchronous | 确定是否异步完成属性交换。 |
CPropExchange::IsLoading | 指示属性是加载到控件中还是从控件中保存。 |
备注
CPropExchange
没有基类。
建立属性交换的上下文和方向。
持久性是控件状态信息的交换,通常由控件本身和介质之间的属性表示。
框架在收到通知,知道要从持久存储加载 OLE 控件的属性或存储到持久存储时,会构造一个从 CPropExchange
派生的对象。
框架会将指向此 CPropExchange
对象的指针传递给控件的 DoPropExchange
函数。 如果使用向导为控件创建起始文件,则控件的 DoPropExchange
函数会调用 COleControl::DoPropExchange
。 基类版本会交换控件的常用属性;请修改派生类的版本来交换已添加到控件的属性。
可使用 CPropExchange
来序列化控件的属性,或者在加载或创建控件时初始化控件的属性。 CPropExchange
的 ExchangeProp
和 ExchangeFontProp
成员函数能够将属性存储到其他介质和从其他介质加载属性。
若要详细了解如何使用 CPropExchange
,请参阅 MFC ActiveX 控件:属性页一文。
继承层次结构
CPropExchange
要求
标头:afxctl.h
CPropExchange::ExchangeBlobProp
序列化存储二进制大型对象 (BLOB) 数据的属性。
virtual BOOL ExchangeBlobProp(
LPCTSTR pszPropName,
HGLOBAL* phBlob,
HGLOBAL hBlobDefault = NULL) = 0;
参数
pszPropName
要交换的属性的名称。
phBlob
指向变量的指针,该变量指向属性的存储位置(变量通常是类的成员)。
hBlobDefault
该属性的默认值。
返回值
如果交换成功,则为非零值;如果失败,则为 0。
注解
根据需要在 phBlob 引用的变量中读取或写入属性的值。 如果指定了 hBlobDefault,它将用作属性的默认值。 如果控件的序列化出于任何原因失败,则使用此值。
函数 CArchivePropExchange::ExchangeBlobProp
、CResetPropExchange::ExchangeBlobProp
和 CPropsetPropExchange::ExchangeBlobProp
会替代此纯虚拟函数。
CPropExchange::ExchangeFontProp
在存储介质和控件之间交换 font 属性。
virtual BOOL ExchangeFontProp(
LPCTSTR pszPropName,
CFontHolder& font,
const FONTDESC* pFontDesc,
LPFONTDISP pFontDispAmbient) = 0;
参数
pszPropName
要交换的属性的名称。
font
对包含 font 属性的 CFontHolder 对象的引用。
pFontDesc
指向 FONTDESC 结构的指针,其中包含在 pFontDispAmbient 为 NULL 时用于初始化 font 属性的默认状态的值。
pFontDispAmbient
指向字体的 IFontDisp
接口的指针,该字体用于初始化 font 属性的默认状态。
返回值
如果交换成功,则为非零值;如果失败,则为 0。
备注
如果将 font 属性从介质加载到控件,则从介质中检索字体的特征,并使用这些特征来初始化 font 引用的 CFontHolder
对象。 如果正在存储 font 属性,则 font 对象中的特征将写入到介质中。
函数 CArchivePropExchange::ExchangeFontProp
、CResetPropExchange::ExchangeFontProp
和 CPropsetPropExchange::ExchangeFontProp
会替代此纯虚拟函数。
CPropExchange::ExchangePersistentProp
在控件和文件之间交换属性。
virtual BOOL ExchangePersistentProp(
LPCTSTR pszPropName,
LPUNKNOWN* ppUnk,
REFIID iid,
LPUNKNOWN pUnkDefault) = 0;
参数
pszPropName
要交换的属性的名称。
ppUnk
指向变量的指针,该变量包含指向属性的 IUnknown
接口的指针(此变量通常是类的成员)。
iid
控件将使用的属性上的接口的 ID。
pUnkDefault
该属性的默认值。
返回值
如果交换成功,则为非零值;如果失败,则为 0。
备注
如果正在将属性从文件加载到控件,则会从该文件创建并初始化该属性。 如果正在存储属性,则其值将写入文件。
函数 CArchivePropExchange::ExchangePersistentProp
、CResetPropExchange::ExchangePersistentProp
和 CPropsetPropExchange::ExchangePersistentProp
会替代此纯虚拟函数。
CPropExchange::ExchangeProp
在存储介质和控件之间交换属性。
virtual BOOL ExchangeProp(
LPCTSTR pszPropName,
VARTYPE vtProp,
void* pvProp,
const void* pvDefault = NULL) = 0 ;
参数
pszPropName
要交换的属性的名称。
vtProp
一个符号,指定要交换的属性的类型。 可能的值为:
符号 | 属性类型 |
---|---|
VT_I2 | short |
VT_I4 | long |
VT_BOOL | BOOL |
VT_BSTR | CString |
VT_CY | CY |
VT_R4 | float |
VT_R8 | double |
pvProp
指向属性的值的指针。
pvDefault
指向属性的默认值的指针。
返回值
如果交换成功,则为非零值;如果失败,则为 0。
注解
如果正在将属性从介质加载到控件,则从介质中检索该属性的值,并将其存储在 pvProp 指向的对象中。 如果正在将属性存储到介质中, 则 pvProp 指向的对象的值将写入介质。
函数 CArchivePropExchange::ExchangeProp
、CResetPropExchange::ExchangeProp
和 CPropsetPropExchange::ExchangeProp
会替代此纯虚拟函数。
CPropExchange::ExchangeVersion
由框架调用来处理版本号的持久性。
virtual BOOL ExchangeVersion(
DWORD& dwVersionLoaded,
DWORD dwVersionDefault,
BOOL bConvert);
参数
dwVersionLoaded
对变量的引用,在该变量中将存储正在加载的持久数据的版本号。
dwVersionDefault
控件的当前版本号。
bConvert
指示是将持久数据转换为当前版本,还是将其保留为加载的相同版本。
返回值
如果函数成功,则为非零值;否则为 0。
CPropExchange::GetVersion
调用此函数可检索控件的版本号。
DWORD GetVersion();
返回值
控件的版本号。
CPropExchange::IsAsynchronous
确定是否异步完成属性交换。
BOOL IsAsynchronous();
返回值
如果以异步方式交换属性,则返回 TRUE;否则返回 FALSE。
CPropExchange::IsLoading
调用此函数可确定属性是加载到控件中还是从控件中保存。
BOOL IsLoading();
返回值
如果正在加载属性,则为非零值;否则为 0。