组件对象模型与ATL实现
2010-09-04 20:48:02 来源:WEB开发网Canvas.cpp的CreateObject例子使用简单的字符串比较,实际应用中,可以采用hash map等加快对象查找的速度。所以,COM对象有时候也要用其它方法创建为好!
同样的方法,给Layer对象添加属性,以得到 Shapes集合属性:
// MapLib.idl : MapLib 的IDL 源
...
interface ILayer : IDispatch{
[propget,id(1),helpstring("得到图形集合对象的引用")] HRESULT Shapes([out, retval] IShapes** ppRef);
};
添加实现代码到Layer.h中,你只需注意加粗的文字:
// Layer.h : CLayer 的声明
...
#include "Shapes.h"
// CLayer
class ATL_NO_VTABLE CLayer :
...
{
public:
CComPtr<IShapes> m_spShapes;
CLayer()
{
}
...
HRESULT FinalConstruct()
{
return CShapes::CreateInstance(&m_spShapes);
// return S_OK;
}
void FinalRelease()
{
}
public:
STDMETHODIMP get_Shapes(IShapes** ppRef)
{
return m_spShapes.CopyTo(ppRef);
}
};
现在,你的对象模型就建好了。你可以从Canvas根对象得到图层集合(Layers)对象,你还可以向Layers中添加图层。你可以根据索引(目前是以1为基数)得到图层对象(Layer)的引用。从Layer对象得到图形集合对象(Shapes),并进一步操纵Shapes。
更多精彩
赞助商链接