interface IPoints : IDispatch
    {
        [propget, helpstring("Returns number of points in collection.")]
        HRESULT Count([out, retval] long* retval);        [propget, id(0),
        helpstring("Given an index, returns a point in the collection.")]
        HRESULT Item([in] long Index, [out, retval] IPoint** retval);        [propget, restricted, id(DISPID_NEWENUM)]    // Must be propget.
        HRESULT _NewEnum([out, retval] IUnknown** retval);
    }VC自定义控件如何才能得到上述Item一样的定义效果,就是可以这样访问
XXX.Points.Item(0).YYYY还有就是这个IPoint又是如何定义

解决方案 »

  1.   

    实现Points集合对象,XXX对象定义一个只读属性,返回Points集合对象
      

  2.   

    在Points的Item属性里,动态建立一个子对象,例如Point,然后将out参数设为子对象的IDispatch接口,因此,Item属性应该这样定义:Item([in]VARIANT *Index,[out,retval]VARIANT *pDisp),在这里out参数也可以是LPDISPATCH。
    [in]参数设为VARIANT主要是为了支持以数字索引或关键字索引访问子对象,例如用XXX.Projects.Item(1)或XXX.projects.Item("SubObjectOne")访问同一个子对象。你还可以将Item属性的id设为DISPID_VALUE,即id(DISPID_VALUE),这样你可以直接用下面的方式访问子对象:XXX.Projects(1)或XXX.Projects("SubObjectOne"),省去显式地指明Item属性。