分享
 
 
 

DoPropExchange

王朝百科·作者佚名  2010-05-21
窄屏简体版  字體: |||超大  

以下是MSDN中的对于DoPropExchange函数的介绍:

virtual void DoPropExchange( CPropExchange* pPX );

Parameters

pPX

A pointer to a CPropExchange object. The framework supplies this object to establish the context of the property exchange, including its direction.

Remarks

Called by the framework when loading or storing a control from a persistent storage representation, such as a stream or property set. This function normally makes calls to the PX_ family of functions to load or store specific user-defined properties of an OLE control.

If Control Wizard has been used to create the OLE control project, the overridden version of this function will serialize the stock properties supported by COleControl with a call to the base class function, COleControl::DoPropExchange. As you add user-defined properties to your OLE control you will need to modify this function to serialize your new properties. For more information on serialization, see the articleActiveX Controls: Serializing in Visual C++ Programmer’s Guide

实现DoPropExchange 函数

当使用“ActiveX 控件向导”生成控件项目时,几个默认处理函数被自动添加到控件类,包括 COleControl::DoPropExchange 的默认实现。下例显示添加到用“ActiveX 控件向导”创建的类的代码:

void CSampleCtrl::DoPropExchange( CPropExchange* pPX)

{

ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));

COleControl::DoPropExchange(pPX);

// TODO: Call PX_ functions for each persistent custom property.

}

如果要使属性持久,则通过添加对属性交换函数的调用来修改 DoPropExchange。下例说明自定义布尔 CircleShape 属性的序列化,这里 CircleShape 属性的默认值为 TRUE:

void CSampleCtrl::DoPropExchange(CPropExchange* pPX)

{

ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));

COleControl::DoPropExchange(pPX);

PX_Bool(pPX, "CircleShape", m_bCircleShape, TRUE);

}

下表列出了可用于序列化控件属性的可能的属性交换函数:

属性交换函数 目的

PX_Blob( ) 序列化二进制大对象 (BLOB) 类型数据属性。

PX_Bool( ) 序列化布尔类型属性。

PX_Color( ) 序列化颜色类型属性。

PX_Currency( ) 序列化 CY(货币)类型属性。

PX_Double( ) 序列化 double 类型属性。

PX_Font( ) 序列化 Font 类型属性。

PX_Float( ) 序列化 float 类型属性。

PX_IUnknown( ) 序列化 LPUNKNOWN 类型属性。

PX_Long( ) 序列化 long 类型属性。

PX_Picture( ) 序列化 Picture 类型属性。

PX_Short( ) 序列化 short 类型属性。

PX_String( ) 序列化 CString 类型属性。

PX_ULong( ) 序列化 ULONG 类型属性。

PX_UShort( ) 序列化 USHORT 类型属性。

有关这些属性交换函数的更多信息,请参见“MFC 参考”中的 OLE 控件的持久性。

自定义 DoPropExchange 的默认行为

DoPropertyExchange 的默认实现(如上一主题所示)调用 COleControl 基类。此操作序列化 COleControl 自动支持的属性集,所使用的存储空间比只序列化控件的自定义属性多。移除此调用使您的对象得以只序列化您认为重要的那些属性。保存或加载控件对象时,除非对控件已实现的任何常用属性状态显式添加 PX_ 调用,否则将不会序列化它们。

实现版本支持

版本支持使修订过的 ActiveX 控件得以添加新的持久性属性,并仍可以检测和加载由早期版本的控件创建的持久性状态。若要使控件的版本可用作其持久性数据的一部分,请在控件的 DoPropExchange 函数中调用 COleControl::ExchangeVersion。如果 ActiveX 控件是用“ActiveX 控件向导”创建的,则将自动插入此调用。如果不需要版本支持,可移除此调用。但是,控件大小的成本对于版本支持所提供的额外灵活性非常小(4 个字节)。

如果控件不是用“ActiveX 控件向导”创建的,则通过在 DoPropExchange 函数的开始处(在调用 COleControl::DoPropExchange 之前)插入下行来添加对 COleControl::ExchangeVersion 的调用:

void CSampleCtrl::DoPropExchange(CPropExchange* pPX)

{

ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));

COleControl::DoPropExchange(pPX);

...

}

可以使用任何 DWORD 作为版本号。“ActiveX 控件向导”所生成的项目使用 _wVerMinor 和 _wVerMajor 作为默认值。_wVerMinor 和 _wVerMajor 是在项目的 ActiveX 控件类的实现文件中定义的全局常数。在 DoPropExchange 函数的其余部分,可以随时调用 CPropExchange::GetVersion 检索正在保存或检索的版本。

在下例中,此示例控件的版本 1 仅有“ReleaseDate”属性。版本 2 添加了“OriginalDate”属性。如果指示控件从旧版本加载持久性状态,则控件将新属性的成员变量初始化为默认值。

void CSampleCtrl::DoPropExchange(CPropExchange* pPX)

{

ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));

COleControl::DoPropExchange(pPX);

PX_Long(pPX, "ReleaseDate", m_releaseDate);

if (pPX->GetVersion() >= MAKELONG(0, 2))

{

PX_Long(pPX, "OriginalDate", m_originalDate);

}

else

{

if (pPX->IsLoading())

m_originalDate = 0;

}

}

默认情况下,控件将旧数据“转换”成最新格式。例如,如果控件的版本 2 加载由版本 1 保存的数据,则数据再次保存时将写成版本 2 的格式。如果希望控件以上次读取的格式保存数据,则在调用 ExchangeVersion 时将 FALSE 作为第三个参数传递。此第三个参数是可选的,默认值为 TRUE。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有