233 lines
6.6 KiB
C++
233 lines
6.6 KiB
C++
/**********************************************************************/
|
|
/** Microsoft Windows/NT **/
|
|
/** Copyright(c) Microsoft Corporation, 1997 - 1998 **/
|
|
/**********************************************************************/
|
|
|
|
/*
|
|
ccdata.cpp
|
|
base class for the IAbout interface for MMC
|
|
|
|
FILE HISTORY:
|
|
|
|
*/
|
|
|
|
#include <stdafx.h>
|
|
#include "ccdata.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
|
|
CComponentData::CComponentData()
|
|
{
|
|
}
|
|
|
|
CComponentData::~CComponentData()
|
|
{
|
|
}
|
|
|
|
IMPLEMENT_ADDREF_RELEASE(CComponentData)
|
|
|
|
STDMETHODIMP CComponentData::QueryInterface(REFIID riid, LPVOID *ppv)
|
|
{
|
|
AFX_MANAGE_STATE(AfxGetStaticModuleState());
|
|
|
|
// Is the pointer bad?
|
|
if (ppv == NULL)
|
|
return E_INVALIDARG;
|
|
|
|
// Place NULL in *ppv in case of failure
|
|
*ppv = NULL;
|
|
|
|
// This is the non-delegating IUnknown implementation
|
|
if (riid == IID_IUnknown)
|
|
*ppv = (LPVOID) this;
|
|
else if (riid == IID_IComponentData)
|
|
*ppv = (IComponentData *) this;
|
|
else if (riid == IID_IExtendPropertySheet)
|
|
*ppv = (IExtendPropertySheet *) this;
|
|
else if (riid == IID_IExtendPropertySheet2)
|
|
*ppv = (IExtendPropertySheet2 *) this;
|
|
else if (riid == IID_IExtendContextMenu)
|
|
*ppv = (IExtendContextMenu *) this;
|
|
else if (riid == IID_IPersistStreamInit)
|
|
*ppv = (IPersistStreamInit *) this;
|
|
|
|
// If we're going to return an interface, AddRef it first
|
|
if (*ppv)
|
|
{
|
|
((LPUNKNOWN) *ppv)->AddRef();
|
|
return hrOK;
|
|
}
|
|
else
|
|
return E_NOINTERFACE;
|
|
}
|
|
|
|
|
|
|
|
/*!--------------------------------------------------------------------------
|
|
CComponentData::FinalConstruct()
|
|
Initialize values
|
|
Author:
|
|
Modifide 12/12/97 WeiJiang, Check return value from
|
|
CreateTFSComponentData and check the result
|
|
---------------------------------------------------------------------------*/
|
|
HRESULT
|
|
CComponentData::FinalConstruct()
|
|
{
|
|
AFX_MANAGE_STATE(AfxGetStaticModuleState());
|
|
|
|
HRESULT hr = S_OK;
|
|
IComponentData * pComponentData = NULL;
|
|
|
|
// Create the underlying TFSComponentData
|
|
hr = CreateTFSComponentData(&pComponentData,
|
|
(ITFSCompDataCallback *) &m_ITFSCompDataCallback);
|
|
//
|
|
if(S_OK == hr)
|
|
{
|
|
m_spTFSComponentData.Query(pComponentData);
|
|
m_spComponentData = pComponentData;
|
|
m_spExtendPropertySheet.Query(pComponentData);
|
|
m_spExtendContextMenu.Query(pComponentData);
|
|
m_spSnapinHelp.Query(pComponentData);
|
|
}
|
|
|
|
return hr;
|
|
}
|
|
|
|
/*!--------------------------------------------------------------------------
|
|
CComponentData::FinalRelease()
|
|
Called when the COM object is going away
|
|
Author:
|
|
---------------------------------------------------------------------------*/
|
|
void
|
|
CComponentData::FinalRelease()
|
|
{
|
|
AFX_MANAGE_STATE(AfxGetStaticModuleState());
|
|
|
|
m_spTFSComponentData.Release();
|
|
|
|
// Call destroy on our TFSComponentData if needed
|
|
if (m_spComponentData)
|
|
m_spComponentData->Destroy();
|
|
m_spComponentData.Release();
|
|
|
|
m_spExtendPropertySheet.Release();
|
|
m_spExtendContextMenu.Release();
|
|
m_spSnapinHelp.Release();
|
|
}
|
|
|
|
|
|
/*---------------------------------------------------------------------------
|
|
Implementation of EITFSCompDataCallback
|
|
---------------------------------------------------------------------------*/
|
|
|
|
STDMETHODIMP CComponentData::EITFSCompDataCallback::QueryInterface(REFIID iid,void **ppv)
|
|
{
|
|
*ppv = 0;
|
|
if (iid == IID_IUnknown)
|
|
*ppv = (IUnknown *) this;
|
|
else if (iid == IID_ITFSCompDataCallback)
|
|
*ppv = (ITFSCompDataCallback *) this;
|
|
else
|
|
return ResultFromScode(E_NOINTERFACE);
|
|
|
|
((IUnknown *) *ppv)->AddRef();
|
|
return hrOK;
|
|
}
|
|
|
|
STDMETHODIMP_(ULONG) CComponentData::EITFSCompDataCallback::AddRef()
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
STDMETHODIMP_(ULONG) CComponentData::EITFSCompDataCallback::Release()
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
STDMETHODIMP CComponentData::EITFSCompDataCallback::GetClassID(LPCLSID pClassID)
|
|
{
|
|
EMPrologIsolated(CComponentData, ITFSCompDataCallback, GetClassID)
|
|
return pThis->GetClassID(pClassID);
|
|
}
|
|
|
|
STDMETHODIMP CComponentData::EITFSCompDataCallback::IsDirty()
|
|
{
|
|
EMPrologIsolated(CComponentData, ITFSCompDataCallback, IsDirty())
|
|
return pThis->IsDirty();
|
|
}
|
|
|
|
STDMETHODIMP CComponentData::EITFSCompDataCallback::Load(LPSTREAM pStm)
|
|
{
|
|
EMPrologIsolated(CComponentData, ITFSCompDataCallback, Load)
|
|
return pThis->Load(pStm);
|
|
}
|
|
|
|
STDMETHODIMP CComponentData::EITFSCompDataCallback::Save(LPSTREAM pStm, BOOL fClearDirty)
|
|
{
|
|
EMPrologIsolated(CComponentData, ITFSCompDataCallback, Save)
|
|
return pThis->Save(pStm, fClearDirty);
|
|
}
|
|
|
|
STDMETHODIMP CComponentData::EITFSCompDataCallback::GetSizeMax(ULARGE_INTEGER *pcbSize)
|
|
{
|
|
EMPrologIsolated(CComponentData, ITFSCompDataCallback, GetSizeMax)
|
|
return pThis->GetSizeMax(pcbSize);
|
|
}
|
|
|
|
STDMETHODIMP CComponentData::EITFSCompDataCallback::InitNew()
|
|
{
|
|
EMPrologIsolated(CComponentData, ITFSCompDataCallback, InitNew)
|
|
return pThis->InitNew();
|
|
}
|
|
|
|
STDMETHODIMP CComponentData::EITFSCompDataCallback::OnInitialize(LPIMAGELIST lpScopeImage)
|
|
{
|
|
EMPrologIsolated(CComponentData, ITFSCompDataCallback, OnInitialize);
|
|
return pThis->OnInitialize(lpScopeImage);
|
|
}
|
|
|
|
STDMETHODIMP CComponentData::EITFSCompDataCallback::OnInitializeNodeMgr(ITFSComponentData *pTFSCompData, ITFSNodeMgr *pNodeMgr)
|
|
{
|
|
EMPrologIsolated(CComponentData, ITFSCompDataCallback, OnInitializeNodeMgr);
|
|
return pThis->OnInitializeNodeMgr(pTFSCompData, pNodeMgr);
|
|
}
|
|
|
|
STDMETHODIMP CComponentData::EITFSCompDataCallback::OnCreateComponent(LPCOMPONENT *ppComponent)
|
|
{
|
|
EMPrologIsolated(CComponentData, ITFSCompDataCallback, OnCreateComponent);
|
|
return pThis->OnCreateComponent(ppComponent);
|
|
}
|
|
|
|
STDMETHODIMP CComponentData::EITFSCompDataCallback::OnDestroy()
|
|
{
|
|
EMPrologIsolated(CComponentData, ITFSCompDataCallback, OnDestroy);
|
|
return pThis->OnDestroy();
|
|
}
|
|
|
|
STDMETHODIMP CComponentData::EITFSCompDataCallback::OnNotifyPropertyChange(LPDATAOBJECT pDataObject, MMC_NOTIFY_TYPE event, LPARAM arg, LPARAM lParam)
|
|
{
|
|
EMPrologIsolated(CComponentData, ITFSCompDataCallback, OnNotifyPropertyChange);
|
|
return pThis->OnNotifyPropertyChange(pDataObject, event, arg, lParam);
|
|
}
|
|
|
|
STDMETHODIMP_(const CLSID *) CComponentData::EITFSCompDataCallback::GetCoClassID()
|
|
{
|
|
EMPrologIsolated(CComponentData, ITFSCompDataCallback, GetCoClassID);
|
|
return pThis->GetCoClassID();
|
|
}
|
|
|
|
STDMETHODIMP CComponentData::EITFSCompDataCallback::OnCreateDataObject(MMC_COOKIE cookie, DATA_OBJECT_TYPES type, IDataObject **ppDataObject)
|
|
{
|
|
EMPrologIsolated(CComponentData, ITFSCompDataCallback, OnCreateDataObject);
|
|
return pThis->OnCreateDataObject(cookie, type, ppDataObject);
|
|
}
|
|
|
|
|
|
|