如何在web页面中初始化控件的属性呢?此文根据实际例子讲解atl开发的控件其属性的初始化方法,假设属性为StreamUrl。
1.
class ATL_NO_VTABLE CXXX:
…
//added
public IPersistPropertyBagImpl<CXXX>
2.
添加属性StreamUrl, 在 idl 文件中对应有
[propget, id(1), helpstring("property StreamUrl")] HRESULT StreamUrl([out, retval] BSTR *pVal);
[propput, id(1), helpstring("property StreamUrl")] HRESULT StreamUrl([in] BSTR newVal);
3
. BEGIN_PROP_MAP(CXXX)
PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4)
PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4)
//<<added
PROP_ENTRY("StreamUrl", 1, CLSID_NULL)
//>>
END_PROP_MAP()
注意在 PROP_ENTRY("StreamUrl", 1, CLSID_NULL) 中的 1为 idl文件中的 id(1),自己作相应的修改。
4.
BEGIN_COM_MAP(CXXX)
…
//<<added
COM_INTERFACE_ENTRY(IPersistPropertyBag)
//>>
END_COM_MAP()
5
.在类CXXX中添加变量如下:
BOOL m_bRequiresSave; //
这是 IPersistPropertyBagImpl 需要的
CComBSTR m_bstrUrl;
并初始化m_bRequiresSave为false。
6
.
STDMETHODIMP CXXX::get_StreamUrl(BSTR *pVal)
{
*pVal = m_bstrUrl.Copy(); //
如果是*pVal = m_bstrUrl,会造成ie崩溃
return S_OK;
}
STDMETHODIMP CXXX::put_StreamUrl(BSTR newVal)
{
//
如果直接m_bstrUrl = newVal,会造成ie崩溃
m_bstrUrl.Empty();
m_bstrUrl = newVal;
return S_OK;
}
7
.网页中
<PARAM name="StreamUrl" value="http://www.shengfengtech.com">