You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
318 lines
7.3 KiB
318 lines
7.3 KiB
//+--------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1996 - 1997.
|
|
//
|
|
// File: dataobj.hxx
|
|
//
|
|
// Contents: Class that implements IDataObject interface
|
|
//
|
|
// Classes: CDataObject
|
|
//
|
|
// History: 12-05-1996 DavidMun Created
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
|
|
#ifndef __DATAOBJ_HXX_
|
|
#define __DATAOBJ_HXX_
|
|
|
|
|
|
|
|
|
|
//+--------------------------------------------------------------------------
|
|
//
|
|
// Class: CDataObject (do)
|
|
//
|
|
// Purpose: Implement the IDataObject interface.
|
|
//
|
|
// History: 1-23-1997 davidmun Created
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
|
|
class CDataObject: public IDataObject
|
|
{
|
|
public:
|
|
|
|
//
|
|
// IUnknown overrides
|
|
//
|
|
|
|
STDMETHOD(QueryInterface) (REFIID riid, LPVOID FAR* ppvObj);
|
|
|
|
STDMETHOD_(ULONG, AddRef) ();
|
|
|
|
STDMETHOD_(ULONG, Release) ();
|
|
|
|
//
|
|
// IDataObject overrides
|
|
//
|
|
|
|
STDMETHOD(GetData) (FORMATETC *pformatetcIn,
|
|
STGMEDIUM *pmedium);
|
|
|
|
STDMETHOD(GetDataHere) (FORMATETC *pformatetc,
|
|
STGMEDIUM *pmedium);
|
|
|
|
STDMETHOD(QueryGetData) (FORMATETC *pformatetc);
|
|
|
|
STDMETHOD(GetCanonicalFormatEtc) (FORMATETC *pformatectIn,
|
|
FORMATETC *pformatetcOut);
|
|
|
|
STDMETHOD(SetData) (FORMATETC *pformatetc,
|
|
STGMEDIUM *pmedium,
|
|
BOOL fRelease);
|
|
|
|
STDMETHOD(EnumFormatEtc) (DWORD dwDirection,
|
|
IEnumFORMATETC **ppenumFormatEtc);
|
|
|
|
STDMETHOD(DAdvise) (FORMATETC *pformatetc,
|
|
DWORD advf,
|
|
IAdviseSink *pAdvSink,
|
|
DWORD *pdwConnection);
|
|
|
|
STDMETHOD(DUnadvise) (DWORD dwConnection);
|
|
|
|
STDMETHOD(EnumDAdvise) (IEnumSTATDATA **ppenumAdvise);
|
|
|
|
//
|
|
// Non-interface member functions
|
|
//
|
|
|
|
CDataObject();
|
|
|
|
~CDataObject();
|
|
|
|
VOID
|
|
SetCookie(
|
|
MMC_COOKIE Cookie,
|
|
DATA_OBJECT_TYPES Type,
|
|
COOKIETYPE ct);
|
|
|
|
DATA_OBJECT_TYPES
|
|
GetContext();
|
|
|
|
COOKIETYPE
|
|
GetCookieType();
|
|
|
|
MMC_COOKIE
|
|
GetCookie();
|
|
|
|
VOID
|
|
SetComponentData(
|
|
CComponentData *pcd);
|
|
|
|
//
|
|
// Public data members
|
|
//
|
|
|
|
static const UINT s_cfInternal; // custom clipboard format
|
|
static const UINT s_cfMachineName; // server focus
|
|
static const UINT s_cfImportViews; // public fmt we ask for when acting
|
|
// as an extension
|
|
|
|
private:
|
|
|
|
HRESULT
|
|
_WriteClsid(
|
|
IStream *pstm);
|
|
|
|
HRESULT
|
|
_WriteDisplayName(
|
|
IStream *pstm);
|
|
|
|
HRESULT
|
|
_WriteResultRecNo(
|
|
IStream *pstm);
|
|
|
|
HRESULT
|
|
_WriteResultRecord(
|
|
IStream *pstm);
|
|
|
|
HRESULT
|
|
_WriteScopeAbbrev(
|
|
IStream *pstm);
|
|
|
|
HRESULT
|
|
_WriteScopeFilter(
|
|
IStream *pstm);
|
|
|
|
HRESULT
|
|
_WriteInternal(
|
|
IStream *pstm);
|
|
|
|
HRESULT
|
|
_WriteNodeType(
|
|
IStream *pstm);
|
|
|
|
HRESULT
|
|
_WriteNodeId2(
|
|
LPSTGMEDIUM pmedium);
|
|
|
|
HRESULT
|
|
_WriteNodeTypeString(
|
|
IStream *pstm);
|
|
|
|
|
|
CDllRef _DllRef; // inc/dec dll object count
|
|
ULONG _cRefs; // object refcount
|
|
MMC_COOKIE _Cookie; // what this obj refers to
|
|
DATA_OBJECT_TYPES _Context; // context in which this was created
|
|
COOKIETYPE _Type; // how to interpret _Cookie
|
|
CComponentData *_pcd; // NULL if created by csnapin
|
|
|
|
public:
|
|
//
|
|
// Clipboard formats used with GetDataHere. See also some formats
|
|
// declared in the public section.
|
|
//
|
|
|
|
static const UINT s_cfNodeType;
|
|
static const UINT s_cfNodeId2;
|
|
static const UINT s_cfNodeTypeString;
|
|
static const UINT s_cfDisplayName;
|
|
static const UINT s_cfSnapinClsid;
|
|
static const UINT s_cfSnapinPreloads;
|
|
static const UINT s_cfExportScopeAbbrev;
|
|
static const UINT s_cfExportScopeFilter;
|
|
static const UINT s_cfExportResultRecNo;
|
|
};
|
|
|
|
|
|
|
|
|
|
//+--------------------------------------------------------------------------
|
|
//
|
|
// Member: CDataObject::GetContext
|
|
//
|
|
// Synopsis: Return value indicating context under which this data object
|
|
// was created.
|
|
//
|
|
// History: 12-11-1996 DavidMun Created
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
|
|
inline DATA_OBJECT_TYPES
|
|
CDataObject::GetContext()
|
|
{
|
|
return _Context;
|
|
}
|
|
|
|
|
|
|
|
|
|
//+--------------------------------------------------------------------------
|
|
//
|
|
// Member: CDataObject::GetCookieType
|
|
//
|
|
// Synopsis: Return the type of cookie contained within this object.
|
|
//
|
|
// History: 1-23-1997 davidmun Created
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
|
|
inline COOKIETYPE
|
|
CDataObject::GetCookieType()
|
|
{
|
|
return _Type;
|
|
}
|
|
|
|
|
|
|
|
//+--------------------------------------------------------------------------
|
|
//
|
|
// Member: CDataObject::GetCookie
|
|
//
|
|
// Synopsis: Return cookie for this object.
|
|
//
|
|
// History: 12-11-1996 DavidMun Created
|
|
//
|
|
// Notes: CAUTION: if cookie is a CLogInfo, caller must AddRef it
|
|
// to keep it.
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
|
|
inline MMC_COOKIE
|
|
CDataObject::GetCookie()
|
|
{
|
|
return _Cookie;
|
|
}
|
|
|
|
|
|
|
|
|
|
//+--------------------------------------------------------------------------
|
|
//
|
|
// Member: CDataObject::SetComponentData
|
|
//
|
|
// Synopsis: Store back pointer to parent component data object.
|
|
//
|
|
// History: 3-12-1997 DavidMun Created
|
|
//
|
|
// Notes: If the data object was created by a CSnapin object, this
|
|
// method will never be called.
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
|
|
inline VOID
|
|
CDataObject::SetComponentData(
|
|
CComponentData *pcd)
|
|
{
|
|
_pcd = pcd;
|
|
}
|
|
|
|
|
|
|
|
|
|
//+--------------------------------------------------------------------------
|
|
//
|
|
// Member: CDataObject::_WriteClsid
|
|
//
|
|
// Synopsis: Write this snapin's clsid into [pstm].
|
|
//
|
|
// History: 06-09-1997 DavidMun Created
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
|
|
inline HRESULT
|
|
CDataObject::_WriteClsid(
|
|
IStream *pstm)
|
|
{
|
|
HRESULT hr;
|
|
|
|
hr = pstm->Write(&CLSID_EventLogSnapin,
|
|
sizeof CLSID_EventLogSnapin,
|
|
NULL);
|
|
CHECK_HRESULT(hr);
|
|
return hr;
|
|
}
|
|
|
|
|
|
|
|
|
|
//+--------------------------------------------------------------------------
|
|
//
|
|
// Member: CDataObject::_WriteInternal
|
|
//
|
|
// Synopsis: Write this object's data in the private clipboard format
|
|
// to the stream [pstm].
|
|
//
|
|
// History: 06-09-1997 DavidMun Created
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
|
|
inline HRESULT
|
|
CDataObject::_WriteInternal(
|
|
IStream *pstm)
|
|
{
|
|
HRESULT hr;
|
|
|
|
CDataObject *pThis = this;
|
|
hr = pstm->Write(&pThis, sizeof (CDataObject *), NULL);
|
|
CHECK_HRESULT(hr);
|
|
return hr;
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif // __DATAOBJ_HXX_
|