home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / com / inole2 / chap19 / hcosmo / ioleobj.cpp < prev    next >
C/C++ Source or Header  |  1995-05-03  |  6KB  |  237 lines

  1. /*
  2.  * IOLEOBJ.CPP
  3.  * Cosmo Handler Chapter 19
  4.  *
  5.  * Implementation of the IOleObject interface for Cosmo Handler.
  6.  *
  7.  * Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
  8.  *
  9.  * Kraig Brockschmidt, Microsoft
  10.  * Internet  :  kraigb@microsoft.com
  11.  * Compuserve:  >INTERNET:kraigb@microsoft.com
  12.  */
  13.  
  14.  
  15. #include "hcosmo.h"
  16.  
  17.  
  18. /*
  19.  * CImpIOleObject::CImpIOleObject
  20.  * CImpIOleObject::~CImpIOleObject
  21.  *
  22.  * Parameters (Constructor):
  23.  *  pObj            PCFigure of the object we're in.
  24.  *  pUnkOuter       LPUNKNOWN to which we delegate.
  25.  */
  26.  
  27. CImpIOleObject::CImpIOleObject(PCFigure pObj, LPUNKNOWN pUnkOuter)
  28.     {
  29.     m_cRef=0;
  30.     m_pObj=pObj;
  31.     m_pUnkOuter=pUnkOuter;
  32.     return;
  33.     }
  34.  
  35. CImpIOleObject::~CImpIOleObject(void)
  36.     {
  37.     return;
  38.     }
  39.  
  40.  
  41.  
  42. /*
  43.  * CImpIOleObject::QueryInterface
  44.  * CImpIOleObject::AddRef
  45.  * CImpIOleObject::Release
  46.  */
  47.  
  48. STDMETHODIMP CImpIOleObject::QueryInterface(REFIID riid, PPVOID ppv)
  49.     {
  50.     return m_pUnkOuter->QueryInterface(riid, ppv);
  51.     }
  52.  
  53.  
  54. STDMETHODIMP_(ULONG) CImpIOleObject::AddRef(void)
  55.     {
  56.     ++m_cRef;
  57.     return m_pUnkOuter->AddRef();
  58.     }
  59.  
  60. STDMETHODIMP_(ULONG) CImpIOleObject::Release(void)
  61.     {
  62.     --m_cRef;
  63.     return m_pUnkOuter->Release();
  64.     }
  65.  
  66.  
  67.  
  68. /*
  69.  * The only member function we need to implement in a handler is
  70.  * IOleObject::GetExtent since we know exactly how large our data
  71.  * is.  All others can be delegated.
  72.  */
  73.  
  74.  
  75. /*
  76.  * CImpIOleObject::GetExtent
  77.  *
  78.  * Purpose:
  79.  *  Retrieves the size of the object in HIMETRIC units.
  80.  *
  81.  * Parameters:
  82.  *  dwAspect        DWORD of the aspect requested
  83.  *  pszl            LPSIZEL into which to store the size.
  84.  *
  85.  * Return Value:
  86.  *  HRESULT         NOERROR if successful, error code otherwise.
  87.  */
  88.  
  89. STDMETHODIMP CImpIOleObject::GetExtent(DWORD dwAspect, LPSIZEL pszl)
  90.     {
  91.     //We can just use IViewObject2 for this.
  92.     return m_pObj->m_pImpIViewObject2->GetExtent(dwAspect, -1
  93.         , NULL, pszl);
  94.     }
  95.  
  96.  
  97.  
  98. /*
  99.  * CImpIOleObject::DoVerb
  100.  *
  101.  * An example of displaying a message when the local server is not
  102.  * present.  This is a good way to get some free advertising if you
  103.  * allow free redistribution of your handler with documents
  104.  * containing your objects.
  105.  */
  106.  
  107. STDMETHODIMP CImpIOleObject::DoVerb(LONG iVerb, LPMSG pMSG
  108.     , LPOLECLIENTSITE pSite, LONG lIndex, HWND hWnd, LPCRECT prc)
  109.     {
  110.     HRESULT     hr;
  111.  
  112.     hr=m_pObj->m_pDefIOleObject->DoVerb(iVerb, pMSG, pSite, lIndex
  113.         , hWnd, prc);
  114.  
  115.     if (FAILED(hr))
  116.         {
  117.         MessageBox(hWnd, TEXT("Local server not present.\nIf\
  118.  I wanted to make money\nI would put some advertising here.")
  119.             , TEXT("Cosmo Handler"), MB_OK);
  120.         }
  121.  
  122.     return hr;
  123.     }
  124.  
  125.  
  126.  
  127.  
  128.  
  129. STDMETHODIMP CImpIOleObject::SetClientSite
  130.     (LPOLECLIENTSITE pIOleClientSite)
  131.     {
  132.     return m_pObj->m_pDefIOleObject->SetClientSite(pIOleClientSite);
  133.     }
  134.  
  135. STDMETHODIMP CImpIOleObject::GetClientSite
  136.     (LPOLECLIENTSITE *ppSite)
  137.     {
  138.     return m_pObj->m_pDefIOleObject->GetClientSite(ppSite);
  139.     }
  140.  
  141. STDMETHODIMP CImpIOleObject::SetHostNames(LPCOLESTR pszApp
  142.     , LPCOLESTR pszObj)
  143.     {
  144.     return m_pObj->m_pDefIOleObject->SetHostNames(pszApp, pszObj);
  145.     }
  146.  
  147. STDMETHODIMP CImpIOleObject::Close(DWORD dwSaveOption)
  148.     {
  149.     return m_pObj->m_pDefIOleObject->Close(dwSaveOption);
  150.     }
  151.  
  152. STDMETHODIMP CImpIOleObject::SetMoniker(DWORD dwWhich
  153.     , LPMONIKER pmk)
  154.     {
  155.     return m_pObj->m_pDefIOleObject->SetMoniker(dwWhich, pmk);
  156.     }
  157.  
  158. STDMETHODIMP CImpIOleObject::GetMoniker(DWORD dwAssign
  159.     , DWORD dwWhich, LPMONIKER *ppmk)
  160.     {
  161.     return m_pObj->m_pDefIOleObject->GetMoniker(dwAssign, dwWhich
  162.         , ppmk);
  163.     }
  164.  
  165. STDMETHODIMP CImpIOleObject::InitFromData(LPDATAOBJECT pIDataObject
  166.     , BOOL fCreation, DWORD dw)
  167.     {
  168.     return m_pObj->m_pDefIOleObject->InitFromData(pIDataObject
  169.         , fCreation, dw);
  170.     }
  171.  
  172. STDMETHODIMP CImpIOleObject::GetClipboardData(DWORD dwReserved
  173.     , LPDATAOBJECT *ppIDataObj)
  174.     {
  175.     return m_pObj->m_pDefIOleObject->GetClipboardData(dwReserved
  176.         , ppIDataObj);
  177.     }
  178.  
  179. STDMETHODIMP CImpIOleObject::EnumVerbs(LPENUMOLEVERB *ppEnum)
  180.     {
  181.     return m_pObj->m_pDefIOleObject->EnumVerbs(ppEnum);
  182.     }
  183.  
  184. STDMETHODIMP CImpIOleObject::Update(void)
  185.     {
  186.     return m_pObj->m_pDefIOleObject->Update();
  187.     }
  188.  
  189. STDMETHODIMP CImpIOleObject::IsUpToDate(void)
  190.     {
  191.     return m_pObj->m_pDefIOleObject->IsUpToDate();
  192.     }
  193.  
  194. STDMETHODIMP CImpIOleObject::GetUserClassID(LPCLSID pClsID)
  195.     {
  196.     return m_pObj->m_pDefIOleObject->GetUserClassID(pClsID);
  197.     }
  198.  
  199. STDMETHODIMP CImpIOleObject::GetUserType(DWORD dwForm
  200.     , LPOLESTR *ppszType)
  201.     {
  202.     return m_pObj->m_pDefIOleObject->GetUserType(dwForm, ppszType);
  203.     }
  204.  
  205. STDMETHODIMP CImpIOleObject::SetExtent(DWORD dwAspect, LPSIZEL pszl)
  206.     {
  207.     return m_pObj->m_pDefIOleObject->SetExtent(dwAspect, pszl);
  208.     }
  209.  
  210. STDMETHODIMP CImpIOleObject::Advise(LPADVISESINK pIAdviseSink
  211.     , LPDWORD pdwConn)
  212.     {
  213.     return m_pObj->m_pDefIOleObject->Advise(pIAdviseSink, pdwConn);
  214.     }
  215.  
  216. STDMETHODIMP CImpIOleObject::Unadvise(DWORD dwConn)
  217.     {
  218.     return m_pObj->m_pDefIOleObject->Unadvise(dwConn);
  219.     }
  220.  
  221. STDMETHODIMP CImpIOleObject::EnumAdvise(LPENUMSTATDATA *ppEnum)
  222.     {
  223.     return m_pObj->m_pDefIOleObject->EnumAdvise(ppEnum);
  224.     }
  225.  
  226. STDMETHODIMP CImpIOleObject::GetMiscStatus(DWORD dwAspect
  227.     , LPDWORD pdwStatus)
  228.     {
  229.     return m_pObj->m_pDefIOleObject->GetMiscStatus(dwAspect
  230.         , pdwStatus);
  231.     }
  232.  
  233. STDMETHODIMP CImpIOleObject::SetColorScheme(LPLOGPALETTE pLP)
  234.     {
  235.     return m_pObj->m_pDefIOleObject->SetColorScheme(pLP);
  236.     }
  237.