OLEOBJ.CPP
/************************************************************************** 
   THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF 
   ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO 
   THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A 
   PARTICULAR PURPOSE. 
 
   Copyright 1997 Microsoft Corporation.  All Rights Reserved. 
**************************************************************************/ 
 
/************************************************************************** 
 
   File:          OleObj.cpp 
    
   Description:   COleObject implementation. 
 
**************************************************************************/ 
 
/************************************************************************** 
   #include statements 
**************************************************************************/ 
 
#include "OleObj.h" 
 
/************************************************************************** 
 
   COleObject::COleObject() 
    
**************************************************************************/ 
 
COleObject::COleObject(COleDocument *pOleDoc) 
{ 
OutputDebugString(TEXT("COleObject's constructor\n")); 
 
m_pOleDoc = pOleDoc; 
 
m_fOpen = FALSE; 
} 
 
/************************************************************************** 
 
   COleObject::~COleObject() 
    
**************************************************************************/ 
 
COleObject::~COleObject() 
{ 
OutputDebugString(TEXT("COleObject's destructor\n")); 
} 
 
/************************************************************************** 
 
   COleObject::QueryInterface() 
    
**************************************************************************/ 
 
STDMETHODIMP COleObject::QueryInterface(REFIID riid, LPVOID *ppReturn) 
{ 
OutputDebugString(TEXT("COleObject::QueryInterface\n")); 
 
return m_pOleDoc->QueryInterface(riid, ppReturn); 
} 
 
/************************************************************************** 
 
   COleObject::AddRef() 
    
**************************************************************************/ 
 
STDMETHODIMP_(ULONG) COleObject::AddRef() 
{ 
OutputDebugString(TEXT("COleObject::AddRef\n")); 
 
return m_pOleDoc->AddRef(); 
} 
 
/************************************************************************** 
 
   COleObject::Release() 
    
**************************************************************************/ 
 
STDMETHODIMP_(ULONG) COleObject::Release() 
{ 
OutputDebugString(TEXT("COleObject::Release\n")); 
 
return m_pOleDoc->Release(); 
} 
 
/************************************************************************** 
 
   COleObject::DoVerb() 
    
**************************************************************************/ 
 
STDMETHODIMP COleObject::DoVerb( LONG iVerb, 
                                 LPMSG lpmsg, 
                                 LPOLECLIENTSITE pActiveSite, 
                                 LONG lindex, 
                                 HWND hwndParent, 
                                 LPCRECT lprcPosRect) 
{ 
OutputDebugString(TEXT("COleObject::DoVerb\n")); 
 
HRESULT  hr = E_FAIL; 
 
switch (iVerb) 
   { 
   case OLEIVERB_SHOW: 
   case OLEIVERB_PRIMARY: 
   case OLEIVERB_UIACTIVATE: 
      { 
      //try to get the IOleDocumentSite pointer 
      LPOLEDOCUMENTSITE pOleDocSite; 
      hr = pActiveSite->QueryInterface(IID_IOleDocumentSite, (LPVOID*)&pOleDocSite); 
      if(SUCCEEDED(hr)) 
         { 
         //passing NULL to this will cause the site to call our CreateView method 
         hr = pOleDocSite->ActivateMe(NULL); 
         } 
      } 
      break; 
 
   default: 
      break; 
   } 
 
return hr; 
} 
 
/************************************************************************** 
 
   COleObject::GetClientSite() 
    
**************************************************************************/ 
 
STDMETHODIMP COleObject::GetClientSite(LPOLECLIENTSITE *ppClientSite) 
{ 
OutputDebugString(TEXT("COleObject::GetClientSite\n")); 
 
*ppClientSite = m_pOleDoc->m_pOleClientSite; 
 
return S_OK; 
} 
 
/************************************************************************** 
 
   COleObject::SetClientSite() 
    
**************************************************************************/ 
 
STDMETHODIMP COleObject::SetClientSite(LPOLECLIENTSITE pClientSite) 
{ 
OutputDebugString(TEXT("COleObject::SetClientSite\n")); 
 
// if we already have a client site, release it. 
if(m_pOleDoc->m_pOleClientSite) 
   { 
   m_pOleDoc->m_pOleClientSite->Release(); 
   m_pOleDoc->m_pOleClientSite = NULL; 
   } 
 
// store copy of the client site. 
m_pOleDoc->m_pOleClientSite = pClientSite; 
 
// AddRef it so it doesn't go away. 
if(m_pOleDoc->m_pOleClientSite) 
   m_pOleDoc->m_pOleClientSite->AddRef(); 
 
return S_OK; 
} 
 
/************************************************************************** 
 
   COleObject::Advise() 
    
**************************************************************************/ 
 
STDMETHODIMP COleObject::Advise(LPADVISESINK pAdvSink, LPDWORD pdwConnection) 
{ 
OutputDebugString(TEXT("COleObject::Advise\n")); 
 
// if we haven't made an OleAdviseHolder yet, make one. 
if(!m_pOleDoc->m_pOleAdviseHolder) 
   CreateOleAdviseHolder(&m_pOleDoc->m_pOleAdviseHolder); 
 
// pass this call onto the OleAdviseHolder. 
return m_pOleDoc->m_pOleAdviseHolder->Advise(pAdvSink, pdwConnection); 
} 
 
/************************************************************************** 
 
   COleObject::Unadvise() 
    
**************************************************************************/ 
 
STDMETHODIMP COleObject::Unadvise(DWORD dwConnection) 
{ 
OutputDebugString(TEXT("COleObject::Unadvise\n")); 
 
// pass on to OleAdviseHolder. 
return m_pOleDoc->m_pOleAdviseHolder->Unadvise(dwConnection); 
} 
 
/************************************************************************** 
 
   COleObject::SetHostNames() 
    
**************************************************************************/ 
 
STDMETHODIMP COleObject::SetHostNames(LPCOLESTR szContainerApp, LPCOLESTR szContainerObj) 
{ 
OutputDebugString(TEXT("COleObject::SetHostNames\n")); 
 
return S_OK; 
} 
 
/************************************************************************** 
 
   COleObject::GetExtent() 
    
**************************************************************************/ 
 
STDMETHODIMP COleObject::GetExtent(DWORD dwDrawAspect, LPSIZEL lpsizel) 
{ 
OutputDebugString(TEXT("COleObject::GetExtent\n")); 
 
return E_NOTIMPL; 
} 
 
/************************************************************************** 
 
   COleObject::SetExtent() 
    
**************************************************************************/ 
 
STDMETHODIMP COleObject::SetExtent(DWORD dwDrawAspect, LPSIZEL lpsizel) 
{ 
OutputDebugString(TEXT("COleObject::SetExtent\n")); 
 
return E_NOTIMPL; 
} 
 
/************************************************************************** 
 
   COleObject::Update() 
    
**************************************************************************/ 
 
STDMETHODIMP COleObject::Update() 
{ 
OutputDebugString(TEXT("COleObject::Update\n")); 
 
return S_OK; 
} 
 
/************************************************************************** 
 
   COleObject::Close() 
    
**************************************************************************/ 
 
STDMETHODIMP COleObject::Close(DWORD dwSaveOption) 
{ 
OutputDebugString(TEXT("COleObject::Close\n")); 
 
switch(dwSaveOption) 
   { 
   case OLECLOSE_SAVEIFDIRTY: 
      if(m_pOleDoc->m_fDirty) 
         { 
         m_pOleDoc->m_pPersistStorage->Save(NULL, TRUE); 
         } 
      break; 
 
   case OLECLOSE_NOSAVE: 
      break; 
 
   case OLECLOSE_PROMPTSAVE: 
      break; 
   } 
 
//close the view 
m_pOleDoc->m_pOleDocView->CloseView(0); 
 
return S_OK; 
} 
 
/************************************************************************** 
 
   COleObject::EnumVerbs() 
    
**************************************************************************/ 
 
STDMETHODIMP COleObject::EnumVerbs(LPENUMOLEVERB *ppenumOleVerb) 
{ 
OutputDebugString(TEXT("COleObject::EnumVerbs\n")); 
 
return OLE_S_USEREG; 
} 
 
/************************************************************************** 
 
   COleObject::SetMoniker() 
    
**************************************************************************/ 
 
STDMETHODIMP COleObject::SetMoniker(DWORD dwWhichMoniker, LPMONIKER pMoniker) 
{ 
OutputDebugString(TEXT("COleObject::SetMoniker\n")); 
 
LPMONIKER pTempMoniker; 
 
if(!m_pOleDoc->m_pOleClientSite) 
   return E_FAIL; 
 
if(NOERROR != m_pOleDoc->m_pOleClientSite->GetMoniker(OLEGETMONIKER_ONLYIFTHERE, OLEWHICHMK_OBJFULL, &pTempMoniker)) 
   return E_FAIL; 
 
if(m_pOleDoc->m_pOleAdviseHolder) 
   m_pOleDoc->m_pOleAdviseHolder->SendOnRename(pTempMoniker); 
 
LPRUNNINGOBJECTTABLE pRot; 
 
if(NOERROR == GetRunningObjectTable(0, &pRot)) 
   { 
   if(m_pOleDoc->m_dwRegister) 
      pRot->Revoke(m_pOleDoc->m_dwRegister); 
 
   pRot->Register(0, m_pOleDoc, pTempMoniker, &m_pOleDoc->m_dwRegister); 
 
   pRot->Release(); 
   } 
 
return S_OK; 
} 
 
/************************************************************************** 
 
   COleObject::GetMoniker() 
    
**************************************************************************/ 
 
STDMETHODIMP COleObject::GetMoniker(   DWORD dwAssign,  
                                       DWORD dwWhichMoniker, 
                                       LPMONIKER *ppmk) 
{ 
OutputDebugString(TEXT("COleObject::GetMoniker\n")); 
 
*ppmk = NULL; 
 
return m_pOleDoc->m_pOleClientSite->GetMoniker(OLEGETMONIKER_ONLYIFTHERE, OLEWHICHMK_OBJFULL, ppmk); 
} 
 
/************************************************************************** 
 
   COleObject::InitFromData() 
    
**************************************************************************/ 
 
STDMETHODIMP COleObject::InitFromData( LPDATAOBJECT pDataObject, 
                                       BOOL fCreation, 
                                       DWORD dwReserved) 
{ 
OutputDebugString(TEXT("COleObject::InitFromData\n")); 
 
return E_NOTIMPL; 
} 
 
/************************************************************************** 
 
   COleObject::GetClipboardData() 
    
**************************************************************************/ 
 
STDMETHODIMP COleObject::GetClipboardData(   DWORD dwReserved, 
                                             LPDATAOBJECT *ppDataObject) 
{ 
OutputDebugString(TEXT("COleObject::GetClipboardData\n")); 
 
*ppDataObject = NULL; 
 
return E_NOTIMPL; 
} 
 
/************************************************************************** 
 
   COleObject::IsUpToDate() 
    
**************************************************************************/ 
 
STDMETHODIMP COleObject::IsUpToDate() 
{ 
OutputDebugString(TEXT("COleObject::IsUpToDate\n")); 
 
return S_OK; 
} 
 
/************************************************************************** 
 
   COleObject::GetUserClassID() 
    
**************************************************************************/ 
 
STDMETHODIMP COleObject::GetUserClassID(CLSID *pClsid) 
{ 
OutputDebugString(TEXT("COleObject::GetUserClassID\n")); 
 
return m_pOleDoc->m_pPersistStorage->GetClassID(pClsid); 
} 
 
/************************************************************************** 
 
   COleObject::GetUserType() 
    
**************************************************************************/ 
 
STDMETHODIMP COleObject::GetUserType(DWORD dwFormOfType, LPOLESTR *pszUserType) 
{ 
OutputDebugString(TEXT("COleObject::GetUserType\n")); 
 
return OLE_S_USEREG; 
} 
 
/************************************************************************** 
 
   COleObject::EnumAdvise() 
    
**************************************************************************/ 
 
STDMETHODIMP COleObject::EnumAdvise(LPENUMSTATDATA *ppenumAdvise) 
{ 
OutputDebugString(TEXT("COleObject::EnumAdvise\n")); 
 
*ppenumAdvise = NULL; 
 
// pass on to the OLE Advise holder. 
return m_pOleDoc->m_pOleAdviseHolder->EnumAdvise(ppenumAdvise); 
} 
 
/************************************************************************** 
 
   COleObject::GetMiscStatus() 
    
**************************************************************************/ 
 
STDMETHODIMP COleObject::GetMiscStatus(DWORD dwAspect, DWORD *pdwStatus) 
{ 
OutputDebugString(TEXT("COleObject::GetMiscStatus\n")); 
 
*pdwStatus = NULL; 
 
return OLE_S_USEREG; 
} 
 
/************************************************************************** 
 
   COleObject::SetColorScheme() 
    
**************************************************************************/ 
 
STDMETHODIMP COleObject::SetColorScheme(LPLOGPALETTE lpLogpal) 
{ 
OutputDebugString(TEXT("COleObject::SetColorScheme\n")); 
 
return S_OK; 
}