WEB开发网      婵犵數濞€濞佳囧磹婵犳艾鐤炬い鎰堕檮閸嬬喐銇勯弽銊с€掗梻鍕閺岋箑螣娓氼垱笑闂佽姘﹂褔婀佸┑鐘诧工妤犲憡绂嶉崜褏纾奸弶鍫涘妼缁楁岸鏌熷畡鐗堝殗闁诡喒鏅犲畷褰掝敃閵堝棙顔忔繝鐢靛仦閸ㄥ爼骞愰幘顔肩;闁规崘绉ぐ鎺撳亹闁绘垶锕╁Λ鍕⒑閹肩偛濡奸悗娑掓櫇缁顓兼径妯绘櫇闂佹寧绻傞弻濠囨晝閸屾稓鍘甸柣搴㈢⊕閿氶柣蹇ョ稻缁绘繃绻濋崘銊т紝闂佽鍨伴崯鏉戠暦閻旂⒈鏁傞柛鈾€鏅欑槐妯衡攽閻愬樊鍤熷┑顔藉劤铻為柛鏇ㄥ墯閸欏繘鏌嶉崫鍕櫣缂佲偓婢跺绠鹃柟瀛樼箘閿涘秵顨ラ悙顏勭伈闁诡喖缍婂畷鎯邦槻婵℃彃顭烽弻娑㈠Ω閵夈儺鍔夌紓浣稿€哥粔褰掑极閹剧粯鏅搁柨鐕傛嫹 ---闂傚倷鐒︾€笛兠洪埡鍛闁跨噦鎷�
开发学院软件开发VC 组件对象模型与ATL实现 阅读

组件对象模型与ATL实现

 2010-09-04 20:48:02 来源:WEB开发网 闂傚倷绶氬ḿ褍螞閹绢喖绠柨鐕傛嫹闂傚倷绀侀幉锟犲垂閻㈠灚宕查柟鎵閸庡秵銇勯幒鎴濃偓鐢稿磻閹炬枼妲堟繛鍡楃С濞岊亞绱撻崒姘扁枌闁瑰嚖鎷�婵犵數濮幏鍐川椤撴繄鎹曢梻渚€娼уú銈吤洪妸鈺佺劦妞ゆ帊鑳堕埊鏇㈡煏閸モ晛浠х紒杈╁仱閺佹捇鏁撻敓锟�闂傚倷绶氬ḿ褍螞閹绢喖绠柨鐕傛嫹  闂傚倷鑳舵灙缂佺粯顨呴埢宥夊即閵忕姵鐎梺缁樺姈椤愮厧鈽夊Ο閿嬬€婚梺褰掑亰閸撴稑鈻斿鑸碘拺闁告稑饪村▓鏃€绻涚仦鍌氬闁崇粯鎹囬獮瀣攽閹邦剚顔傛俊鐐€栧濠氬储瑜忛幉鎾晸閿燂拷
核心提示:Canvas.cpp的CreateObject例子使用简单的字符串比较,实际应用中,组件对象模型与ATL实现(10),可以采用hash map等加快对象查找的速度,所以,你可以根据索引(目前是以1为基数)得到图层对象(Layer)的引用,从Layer对象得到图形集合对象(Shapes),COM对象有时候也要用其它方法创

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。

上一页  5 6 7 8 9 10 11 12 13  下一页

Tags:组件 对象 模型

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接