(1) 为组件对象添加基类:public IPersistPropertyBagImpl<CXP>
(2) 添加对应的接口映射:COM_INTERFACE_ENTRY(IPersistPropertyBag)
(3) 属性映射表中添加你要的:
BEGIN_PROP_MAP(CXPPlayer)
PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4)
PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4)
//or CLSID_NULL
PROP_ENTRY("UiMode", 16, CLSID_XPPlayer)
END_PROP_MAP()
这里idl对应关于dispid = 16相关代码如下:
[propget, id(16), helpstring("property UiMode")] HRESULT UiMode([out, retval] INT* newVal);
(2) 添加对应的接口映射:COM_INTERFACE_ENTRY(IPersistPropertyBag)
(3) 属性映射表中添加你要的:
BEGIN_PROP_MAP(CXPPlayer)
PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4)
PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4)
//or CLSID_NULL
PROP_ENTRY("UiMode", 16, CLSID_XPPlayer)
END_PROP_MAP()
这里idl对应关于dispid = 16相关代码如下:
[propget, id(16), helpstring("property UiMode")] HRESULT UiMode([out, retval] INT* newVal);
[propput, id(16), helpstring("property UiMode")] HRESULT UiMode([in] INT newVal);
这样,就定义了自己的固有属性UiMode的,你可以在你的控件使用中使用此属性。为什么需要这个呢?直接有了UiMode属性就可以了,为啥还搞个固有属性。你想想,类似UiMode这种属性,如果你仅仅以属性方式提供的话,更新UiMode会导致界面更新跳动。所以最好的方式就是使用固有属性,让控件在初始化的时候就进行相关的分支操作。要不然等到控件初始化之后,你在调用UiMode属性修改,就会导致界面跳动。
在web中你可以使用固有属性,也就是你经常看到的<Param name = value= >之类的东西,例如:
<object id="pplayer" classid="clsid:ABDC34RT-956E-49CC-B444-73AFE593AD34" width="700" height="600" >
<PARAM NAME="UiMode" VALUE="0">
</object>