#include #include // multiselection dragdrop status enum { DD_NONE = 0, DD_SUCCEEDED, DD_FAILED }; class CMultiSelectItemDataObject: public CComObjectRootEx, public IDataObject { public: CMultiSelectItemDataObject(); ~CMultiSelectItemDataObject(); public: BEGIN_COM_MAP(CMultiSelectItemDataObject) COM_INTERFACE_ENTRY(IDataObject) END_COM_MAP() BEGIN_SNAPINCOMMAND_MAP(CMultiSelectItemDataObject, FALSE) SNAPINCOMMAND_ENTRY(ID_TOP_MOVE, OnMoveMultipleObjs ) SNAPINCOMMAND_ENTRY(ID_VIEW_VERSION, OnVersionInfo ) END_SNAPINCOMMAND_MAP() SNAPINMENUID(IDR_MULTISEL_MENU) // interface member functions public: STDMETHOD(GetDataHere)(FORMATETC *pformatetc, STGMEDIUM *pmedium); STDMETHOD(GetData)(FORMATETC *pformatetc, STGMEDIUM *pmedium); STDMETHOD(QueryGetData)(FORMATETC *pformatetc); STDMETHOD(GetClassID)(CLSID *pCLSID) { return S_FALSE; } STDMETHOD(GetCanonicalFormatEtc)(FORMATETC* /* pformatectIn */,FORMATETC* /* pformatetcOut */) { ATLTRACENOTIMPL(_T("SnapInDataObjectImpl::GetCanonicalFormatEtc\n")); } STDMETHOD(SetData)(FORMATETC* /* pformatetc */, STGMEDIUM* /* pmedium */, BOOL /* fRelease */) { ATLTRACENOTIMPL(_T("SnapInDataObjectImpl::SetData\n")); } STDMETHOD(EnumFormatEtc)(DWORD /* dwDirection */, IEnumFORMATETC** /* ppenumFormatEtc */) { ATLTRACENOTIMPL(_T("SnapInDataObjectImpl::EnumFormatEtc\n")); } STDMETHOD(DAdvise)(FORMATETC *pformatetc, DWORD advf, IAdviseSink *pAdvSink, DWORD *pdwConnection) { ATLTRACENOTIMPL(_T("SnapInDataObjectImpl::SetData\n")); } STDMETHOD(DUnadvise)(DWORD dwConnection) { ATLTRACENOTIMPL(_T("SnapInDataObjectImpl::SetDatan\n")); } STDMETHOD(EnumDAdvise)(IEnumSTATDATA **ppenumAdvise) { ATLTRACENOTIMPL(_T("SnapInDataObjectImpl::SetData\n")); } // non-interface member functions public: HRESULT AddMultiSelectItem( CObjectData *pDataObject ); HRESULT OnNotify(CDomMigratorComponent *pComponent, MMC_NOTIFY_TYPE event, long arg, long param ); HRESULT AddMenuItems(LPCONTEXTMENUCALLBACK piCallback, long *pInsertionAllowed, DATA_OBJECT_TYPES type); void UpdateMenuState( UINT id, LPTSTR pBuf, UINT *flags){} void SetMenuInsertionFlags(bool bBeforeInsertion, long* pInsertionAllowed){} HRESULT Command(long lCommandID, CSnapInObjectRootBase* pObj, DATA_OBJECT_TYPES type); HRESULT OnSelect(IConsole *spConsole); HRESULT OnSelectAllowDragDrop(IConsole *spConsole); HRESULT OnCutOrMove( IConsole* pConsole ); void SetParentGuid( GUID *guid ); void GetParentGuid( GUID *guid ); DWORD GetItemCount(); void SetParentItem( CSnapInItem *pParentItem ); CSnapInItem *GetParentItem(); CSnapInItem *GetSnapInItem(DWORD index); BYTE GetDDStatus(DWORD index); void SetDDStatus(DWORD index, BYTE status); static SMMCDataObjects *ExtractMSDataObjects( LPDATAOBJECT lpDataObject ); /* CNetNode *GetDomainPtr() { return m_pDomain; } void SetDomainPtr( CNetNode *ptr ) { m_pDomain = ptr; } */ HRESULT OnMoveMultipleObjs(bool &bHandled, CSnapInObjectRootBase* pObj); HRESULT OnVersionInfo(bool &bHandled, CSnapInObjectRootBase* pObj); private: CPtrArray m_objectDataArray; CByteArray m_ddStatusArray; CSnapInItem *m_pParentItem; GUID m_parentGuid; // CNetNode *m_pDomain; public: bool m_bHasGroup; public: static UINT s_cfMsObjTypes; // MultiSelect clipformats static UINT s_cfMsDataObjs; // MultiSelect snapin };