IOLEOBJ.CPP

/* 
* IOLEOBJ.CPP
*
* Template IOleObject interface implementation.
*
* Copyright (c)1993-1996 Microsoft Corporation, All Rights Reserved
*
* Kraig Brockschmidt, Software Design Engineer
* Microsoft Systems Developer Relations
*
* Internet : kraigb@microsoft.com
* Compuserve: >INTERNET:kraigb@microsoft.com
*/


#include "ioleobj.h"



/*
* CImpIOleObject::CImpIOleObject
* CImpIOleObject::~CImpIOleObject
*
* Parameters (Constructor):
* pObj LPVOID of the object we're in.
* pUnkOuter LPUNKNOWN to which we delegate.
*/

CImpIOleObject::CImpIOleObject(LPVOID pObj, LPUNKNOWN pUnkOuter)
{
m_cRef=0;
m_pObj=pObj;
m_pUnkOuter=pUnkOuter;
return;
}

CImpIOleObject::~CImpIOleObject(void)
{
return;
}



/*
* CImpIOleObject::QueryInterface
* CImpIOleObject::AddRef
* CImpIOleObject::Release
*
* Purpose:
* Delegating IUnknown members for CImpIOleObject.
*/

STDMETHODIMP CImpIOleObject::QueryInterface(REFIID riid
, LPVOID *ppv)
{
return m_pUnkOuter->QueryInterface(riid, ppv);
}


STDMETHODIMP_(ULONG) CImpIOleObject::AddRef(void)
{
++m_cRef;
return m_pUnkOuter->AddRef();
}

STDMETHODIMP_(ULONG) CImpIOleObject::Release(void)
{
--m_cRef;
return m_pUnkOuter->Release();
}





/*
* CImpIOleObject::SetClientSite
*
* Purpose:
* Provides the object with a pointer to the IOleClient site
* representing the container in which this object resides.
*
* Parameters:
* pIOleClientSite LPOLECLIENTSITE to the container's interface.
*
* Return Value:
* HRESULT NOERROR
*/

STDMETHODIMP CImpIOleObject::SetClientSite
(LPOLECLIENTSITE pIOleClientSite)
{
return NOERROR;
}





/*
* CImpIOleObject::GetClientSite
*
* Purpose:
* Asks the object for the client site provided in SetClientSite.
* If you have not seen SetClientSite yet, return a NULL in
* ppIOleClientSite.
*
* Parameters:
* ppIOleClientSite LPOLECLIENTSITE * in which to store
* the pointer.
*
* Return Value:
* HRESULT NOERROR
*/

STDMETHODIMP CImpIOleObject::GetClientSite(LPOLECLIENTSITE
* ppIOleClientSite)
{
return E_NOTIMPL;
}





/*
* CImpIOleObject::SetHostNames
*
* Purpose:
* Provides the object with names of the container application and
* the object in the container to use in object user interface.
*
* Parameters:
* pszApp LPCSTR of the container application.
* pszObj LPCSTR of some name useful in window titles.
*
* Return Value:
* HRESULT NOERROR
*/

STDMETHODIMP CImpIOleObject::SetHostNames(LPCSTR pszApp
, LPCSTR pszObj)
{
return E_NOTIMPL;
}





/*
* CImpIOleObject::Close
*
* Purpose:
* Forces the object to close down its user interface and unload.
*
* Parameters:
* dwSaveOption DWORD describing the circumstances under which
* the object is being saved and closed.
*
* Return Value:
* HRESULT NOERROR or a general error value.
*/

STDMETHODIMP CImpIOleObject::Close(DWORD dwSaveOption)
{
return E_NOTIMPL;
}





/*
* CImpIOleObject::SetMoniker
*
* Purpose:
* Informs the object of its moniker or its container's moniker
* depending on dwWhich.
*
* Parameters:
* dwWhich DWORD describing whether the moniker is the
* object's or the container's.
* pmk LPMONIKER with the name.
*
* Return Value:
* HRESULT NOERROR or a general error value.
*/

STDMETHODIMP CImpIOleObject::SetMoniker(DWORD dwWhich
, LPMONIKER pmk)
{
return E_NOTIMPL;
}





/*
* CImpIOleObject::GetMoniker
*
* Purpose:
* Asks the object for a moniker that can later be used to
* reconnect to it.
*
* Parameters:
* dwAssign DWORD determining how to assign the moniker to
* to the object.
* dwWhich DWORD describing which moniker the caller wants.
* ppmk LPMONIKER * into which to store the moniker.
*
* Return Value:
* HRESULT NOERROR or a general error value.
*/

STDMETHODIMP CImpIOleObject::GetMoniker(DWORD dwAssign
, DWORD dwWhichMoniker, LPMONIKER * ppmk)
{
return E_NOTIMPL;
}





/*
* CImpIOleObject::InitFromData
*
* Purpose:
* Initilizes the object from the contents of a data object.
*
* Parameters:
* pIDataObject LPDATAOBJECT containing the data.
* fCreation BOOL indicating if this is part of a new
* creation. If FALSE, the container is trying
* to paste here.
* dwReserved DWORD reserved.
*
* Return Value:
* HRESULT NOERROR or a general error value.
*/

STDMETHODIMP CImpIOleObject::InitFromData(LPDATAOBJECT pIDataObject
, BOOL fCreation, DWORD dwReserved)
{
return E_NOTIMPL;
}





/*
* CImpIOleObject::GetClipboardData
*
* Purpose:
* Returns an IDataObject pointer to the caller representing what
* would be on the clipboard if the server did an Edit/Copy using
* OleSetClipboard.
*
* Parameters:
* dwReserved DWORD reserved.
* ppIDataObj LPDATAOBJECT * into which to store the
* pointer.
*
* Return Value:
* HRESULT NOERROR or a general error value.
*/

STDMETHODIMP CImpIOleObject::GetClipboardData(DWORD dwReserved
, LPDATAOBJECT * ppIDataObj)
{
return E_NOTIMPL;
}





/*
* CImpIOleObject::DoVerb
*
* Purpose:
* Executes an object-defined action.
*
* Parameters:
* iVerb LONG index of the verb to execute.
* pMSG LPMSG describing the event causing the
* activation.
* pIOleClientSite LPOLECLIENTSITE to the site involved.
* lIndex LONG the piece on which execution is happening.
* hWndParent HWND of the window in which the object can play
* in-place.
* pRectPos LPRECT of the object in hWndParent where the
* object can play in-place if desired.
*
* Return Value:
* HRESULT NOERROR or a general error value.
*/

STDMETHODIMP CImpIOleObject::DoVerb(LONG iVerb, LPMSG PMSG
, LPOLECLIENTSITE pIOleClientSite, LONG lIndex
, HWND hWndParent, LPCRECT pRectPos)
{
return E_NOTIMPL;
}





/*
* CImpIOleObject::EnumVerbs
*
* Purpose:
* Creates an enumerator that knows the object's verbs. If you
* need to change the verb list dynamically, then you'll need to
* implement this, otherwise you can return OLE_S_USEREG.
*
* Parameters:
* ppEnum LPENUMOLEVERB * into which to return the
* enum.
*
* Return Value:
* HRESULT NOERROR or a general error value.
*/

STDMETHODIMP CImpIOleObject::EnumVerbs(LPENUMOLEVERB * ppEnum)
{
//Trivial implementation if you fill the regDB.
return OLE_S_USEREG;
}





/*
* CImpIOleObject::Update
*
* Purpose:
* Insures that the object is up to date. This is mostly used for
* caching but you must make sure that you recursively call all
* nested objects you contain as well.
*
* Parameters:
* None
*
* Return Value:
* HRESULT NOERROR or a general error value.
*/

STDMETHODIMP CImpIOleObject::Update(void)
{
return E_NOTIMPL;
}





/*
* CImpIOleObject::IsUpToDate
*
* Purpose:
* Returns if the object is currently up to date, which involves
* asking all contained object inside this object if they are up
* to date as well.
*
* Parameters:
* None
*
* Return Value:
* HRESULT NOERROR if successful, S_FALSE if dirty.
*/

STDMETHODIMP CImpIOleObject::IsUpToDate(void)
{
return NOERROR;
}





/*
* CImpIOleObject::GetUserClassID
*
* Purpose:
* Used for linked objects, this returns the class ID of what end
* users think they are editing.
*
* Parameters:
* pClsID LPCLSID in which to store the CLSID.
*
* Return Value:
* HRESULT NOERROR or a general error value.
*/

STDMETHODIMP CImpIOleObject::GetUserClassID(LPCLSID pClsID)
{
return E_NOTIMPL;
}





/*
* CImpIOleObject::GetUserType
*
* Purpose:
* Determines the user-presentable name of the object.
*
* Parameters:
* dwForm DWORD describing which form of the string
* is desired.
* pszType LPTSTR * into which to return the pointer to
* the type string.
*
* Return Value:
* HRESULT NOERROR or a general error value.
*/

STDMETHODIMP CImpIOleObject::GetUserType(DWORD dwForm
, LPTSTR * ppszType)
{
return OLE_S_USEREG;
}





/*
* CImpIOleObject::SetExtent
*
* Purpose:
* Sets the size of the object in HIMETRIC units.
*
* Parameters:
* dwAspect DWORD of the aspect affected.
* pszl LPSIZEL containing the new size.
*
* Return Value:
* HRESULT NOERROR or a general error value.
*/

STDMETHODIMP CImpIOleObject::SetExtent(DWORD dwAspect, LPSIZEL pszl)
{
return E_NOTIMPL;
}





/*
* CImpIOleObject::GetExtent
*
* Purpose:
* Retrieves the size of the object in HIMETRIC units.
*
* Parameters:
* dwAspect DWORD of the aspect requested
* pszl LPSIZEL into which to store the size.
*
* Return Value:
* HRESULT NOERROR or a general error value.
*/

STDMETHODIMP CImpIOleObject::GetExtent(DWORD dwAspect, LPSIZEL pszl)
{
return E_NOTIMPL;
}





/*
* CImpIOleObject::Advise
*
* Purpose:
* Provides an IAdviseSink to the object for notifications.
*
* Parameters:
* pIAdviseSink LPADVISESINK to notify.
* pdwConn LPDWORD into which to store a connection key.
*
* Return Value:
* HRESULT NOERROR or a general error value.
*/

STDMETHODIMP CImpIOleObject::Advise(LPADVISESINK pIAdviseSink
, LPDWORD pdwConn)
{
return E_NOTIMPL;
}





/*
* CImpIOleObject::Unadvise
*
* Purpose:
* Terminates a previous advise connection from Advise.
*
* Parameters:
* dwConn DWORD connection key from Advise.
*
* Return Value:
* HRESULT NOERROR or a general error value.
*/

STDMETHODIMP CImpIOleObject::Unadvise(DWORD dwConn)
{
return E_NOTIMPL;
}





/*
* CImpIOleObject::EnumAdvise
*
* Purpose:
* Creates and returns a enumeration of the advises on this object.
*
* Parameters:
* ppEnum LPENUMSTATDATA * in which to return the
* enumerator.
*
* Return Value:
* HRESULT NOERROR or a general error value.
*/

STDMETHODIMP CImpIOleObject::EnumAdvise(LPENUMSTATDATA *ppEnum)
{
return E_NOTIMPL;
}





/*
* CImpIOleObject::GetMiscStatus
*
* Purpose:
* Returns a set of miscellaneous status flags for the object.
*
* Parameters:
* dwAspect DWORD of the aspect in question.
* pdwStatus LPDWORD in which to store the flags.
*
* Return Value:
* HRESULT NOERROR or a general error value.
*/

STDMETHODIMP CImpIOleObject::GetMiscStatus(DWORD dwAspect
, LPDWORD pdwStatus)
{
return OLE_S_USEREG;
}





/*
* CImpIOleObject::SetColorScheme
*
* Purpose:
* Provides the object with the color palette as recommended by
* the container application that also knows the palettes of other
* objects. The object here is not required to use these colors.
*
* Parameters:
* pLP LPLOGPALETTE providing the colors.
*
* Return Value:
* HRESULT NOERROR or a general error value.
*/

STDMETHODIMP CImpIOleObject::SetColorScheme(LPLOGPALETTE pLP)
{
return E_NOTIMPL;
}