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 来序列化控件的属性,或者在加载或创建控件时初始化控件的属性。 CPropExchangeExchangePropExchangeFontProp 成员函数能够将属性存储到其他介质和从其他介质加载属性。

若要详细了解如何使用 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::ExchangeBlobPropCResetPropExchange::ExchangeBlobPropCPropsetPropExchange::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::ExchangeFontPropCResetPropExchange::ExchangeFontPropCPropsetPropExchange::ExchangeFontProp 会替代此纯虚拟函数。

CPropExchange::ExchangePersistentProp

在控件和文件之间交换属性。

virtual BOOL ExchangePersistentProp(
    LPCTSTR pszPropName,
    LPUNKNOWN* ppUnk,
    REFIID iid,
    LPUNKNOWN pUnkDefault) = 0;

参数

pszPropName
要交换的属性的名称。

ppUnk
指向变量的指针,该变量包含指向属性的 IUnknown 接口的指针(此变量通常是类的成员)。

iid
控件将使用的属性上的接口的 ID。

pUnkDefault
该属性的默认值。

返回值

如果交换成功,则为非零值;如果失败,则为 0。

备注

如果正在将属性从文件加载到控件,则会从该文件创建并初始化该属性。 如果正在存储属性,则其值将写入文件。

函数 CArchivePropExchange::ExchangePersistentPropCResetPropExchange::ExchangePersistentPropCPropsetPropExchange::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::ExchangePropCResetPropExchange::ExchangePropCPropsetPropExchange::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。

另请参阅

层次结构图
COleControl::DoPropExchange