windows-nt/Source/XPSP1/NT/admin/activec/nodemgr/copypast.h
2020-09-26 16:20:57 +08:00

127 lines
4.5 KiB
C++

//____________________________________________________________________________
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1997 - 1999
//
// File: copypast.h
//
// Contents:
//
// Classes:
//
// Functions:
//
// History: 7/21/1997 RaviR Created
//____________________________________________________________________________
//
#ifndef COPYPAST_H__
#define COPYPAST_H__
/***************************************************************************\
*
* CLASS: CMMCClipBoardDataObject
*
* PURPOSE: Implements IMMCClipboardDataObject - interface to data object
* added by MMC to the clipboard, or used in DragDrop operation.
* Also implements several methods for creating and initializing
* the object.
*
* USAGE: Used in Cut, Copy, Paste and DragDrop operations.
* Static members are used to create the object, then it is passed to OLE
* Accessed via interface from the target ( same process or the external one)
*
\***************************************************************************/
class CMMCClipBoardDataObject :
public IMMCClipboardDataObject,
public CComObjectRoot
{
public:
typedef std::vector<CNode *> CNodePtrArray;
// destructor
~CMMCClipBoardDataObject();
BEGIN_COM_MAP(CMMCClipBoardDataObject)
COM_INTERFACE_ENTRY(IMMCClipboardDataObject)
COM_INTERFACE_ENTRY(IDataObject)
END_COM_MAP()
// IMMCClipboardDataObject methods
STDMETHOD(GetSourceProcessId)( DWORD *pdwProcID );
STDMETHOD(GetAction) ( DATA_SOURCE_ACTION *peAction );
STDMETHOD(GetCount) ( DWORD *pdwCount );
STDMETHOD(GetDataObject) ( DWORD dwIndex, IDataObject **ppObject, DWORD *pdwFlags );
STDMETHOD(RemoveCutItems) ( DWORD dwIndex, IDataObject *pCutDataObject );
// IDataObject methods
STDMETHOD(GetDataHere)(LPFORMATETC lpFormatetc, LPSTGMEDIUM lpMedium);
STDMETHOD(GetData)(LPFORMATETC lpFormatetcIn, LPSTGMEDIUM lpMedium);
STDMETHOD(EnumFormatEtc)(DWORD dwDirection, LPENUMFORMATETC* ppEnumFormatEtc);
STDMETHOD(QueryGetData)(LPFORMATETC lpFormatetc);
// Not Implemented IDataObject methods
STDMETHOD(GetCanonicalFormatEtc)(LPFORMATETC lpFormatetcIn, LPFORMATETC lpFormatetcOut) { return E_NOTIMPL; };
STDMETHOD(SetData)(LPFORMATETC lpFormatetc, LPSTGMEDIUM lpMedium, BOOL bRelease) { return E_NOTIMPL; };
STDMETHOD(DAdvise)(LPFORMATETC lpFormatetc, DWORD advf,LPADVISESINK pAdvSink, LPDWORD pdwConnection) { return E_NOTIMPL; };
STDMETHOD(DUnadvise)(DWORD dwConnection) { return E_NOTIMPL; };
STDMETHOD(EnumDAdvise)(LPENUMSTATDATA* ppEnumAdvise) { return E_NOTIMPL; }
public:
// method to add data objects
SC ScAddSnapinDataObject( const CNodePtrArray& nodes, IComponent *pComponent, IDataObject *pDataObject,
bool bCopyEnabled, bool bCutEnabled );
static SC ScCreate( DATA_SOURCE_ACTION operation,
CNode* pNode, bool bScope,
bool bMultiSelect, LPARAM lvData,
IMMCClipboardDataObject **ppMMCDataObject ,
bool& bContainsItems);
// to remove going away snapins
SC ScInvalidate( void );
private: // implementation helpers
// returns DO of snapin if the object contains only one snapin
SC ScGetSingleSnapinObject( IDataObject **ppDataObject );
// method to create the instance
static SC ScCreateInstance(DATA_SOURCE_ACTION operation,
CMMCClipBoardDataObject **ppRawObject,
IMMCClipboardDataObject **ppInterface);
// helper to get node's verb state
static SC ScGetNodeCopyAndCutVerbs( CNode* pNode, IDataObject *pDataObject,
bool bScopePane, LPARAM lvData,
bool *pbCopyEnabled, bool *pbCutEnabled );
// method to add data objects for one item
SC ScAddDataObjectForItem( CNode* pNode, bool bScopePane, LPARAM lvData,
IComponent *pComponent, IDataObject *pDataObject,
bool& bDataObjectAdded );
CLIPFORMAT GetWrapperCF();
private: // data
DATA_SOURCE_ACTION m_eOperation;
struct ObjectEntry
{
IDataObjectPtr spDataObject; // data
IComponentPtr spComponent; // for Notification
DWORD dwSnapinOptions; // copy/cut allowed
};
std::vector<ObjectEntry> m_SelectionObjects;
bool m_bObjectValid; // valid to access any icluded data objects
};
#endif // COPYPAST_H__