为ATL工程添加一个固有属性:

来源:互联网 发布:共享经济的相关数据 编辑:程序博客网 时间:2024/05/19 08:26
  (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);

 [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>

原创粉丝点击