其中包含了IPersistPropertyBag接口。
因此可以简单处理就能实现如下页面中param的设置。
<BODY>
<object classid="clsid:7A351483-9769-401D-A1CE-75F2C265B76C" id=myvar>
<param name="age" value=3000>
</object>
<script lang="javascript">
//为验证age是否真的在初始化时被设置了值,这里alert一下,结果证明正确。
alert(myvar.age);
</script>
ACTIVEX中相应的处理是:
1.以变量形式添加一个属性age,变量名为m_age;
2.在CtestActivexCtrl::DoPropExchange(CPropExchange* pPX)中进行如下处理。
void CtestActivexCtrl::DoPropExchange(CPropExchange* pPX)
{
ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
COleControl::DoPropExchange(pPX);
// TODO: 为每个持久的自定义属性调用 PX_ 函数。
PX_Short(pPX,_T("age"),m_age);
//为实现此时赋值时,activex做一些事,所在此加了打印语句。
CString strAge;
strAge.Format(L"[%d]",m_age);
AfxMessageBox(strAge);
}
这里的用法很像普通MFC对话框程序中将EDIT控件映射为字符串变量后,VC自动给加的DoDataExchange函数,如下:
void CtestsimpleDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, m_strEdit);
}
联系起来,就觉得ACTIVEX中的DoPropExchange也很自然。只是不知道DoPropExchange有没有像DoDataExchange一样支持类似UPdateData(FALSE)这样的反射输出操作?