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 / interfac / iolecont.cpp < prev    next >
C/C++ Source or Header  |  1996-05-21  |  5KB  |  225 lines

  1. /*
  2.  * IOLECONT.CPP
  3.  *
  4.  * Templace implementation of the IOleItemContainer interface.
  5.  *
  6.  * Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
  7.  *
  8.  * Kraig Brockschmidt, Microsoft
  9.  * Internet  :  kraigb@microsoft.com
  10.  * Compuserve:  >INTERNET:kraigb@microsoft.com
  11.  */
  12.  
  13.  
  14. #include "iolecont.h"
  15.  
  16.  
  17. /*
  18.  * CImpIOleItemContainer::CImpIOleItemContainer
  19.  * CImpIOleItemContainer::~CImpIOleItemContainer
  20.  *
  21.  * Parameters (Constructor):
  22.  *  pObj            LPVOID of the object controlling this interface.
  23.  *  pUnkOuter       LPUNKNOWN to which we delegate.
  24.  */
  25.  
  26. CImpIOleItemContainer::CImpIOleItemContainer(LPVOID pObj
  27.     , LPUNKNOWN pUnkOuter)
  28.     {
  29.     m_cRef=0;
  30.     m_pObj=pObj;
  31.     m_pUnkOuter=pUnkOuter;
  32.     return;
  33.     }
  34.  
  35. CImpIOleItemContainer::~CImpIOleItemContainer(void)
  36.     {
  37.     return;
  38.     }
  39.  
  40.  
  41.  
  42. /*
  43.  * CImpIOleItemContainer::QueryInterface
  44.  * CImpIOleItemContainer::AddRef
  45.  * CImpIOleItemContainer::Release
  46.  *
  47.  * Purpose:
  48.  *  IUnknown members for CImpIOleItemContainer object.
  49.  */
  50.  
  51. STDMETHODIMP CImpIOleItemContainer::QueryInterface(REFIID riid
  52.     , LPVOID *ppv)
  53.     {
  54.     return m_pUnkOuter->QueryInterface(riid, ppv);
  55.     }
  56.  
  57. STDMETHODIMP_(ULONG) CImpIOleItemContainer::AddRef(void)
  58.     {
  59.     ++m_cRef;
  60.     return m_pUnkOuter->AddRef();
  61.     }
  62.  
  63. STDMETHODIMP_(ULONG) CImpIOleItemContainer::Release(void)
  64.     {
  65.     --m_cRef;
  66.     return m_pUnkOuter->Release();
  67.     }
  68.  
  69.  
  70.  
  71. /*
  72.  * CImpIOleItemContainer::ParseDisplayName
  73.  *
  74.  * Purpose:
  75.  *  Inherited member of IParseDisplayName that takes a string name
  76.  *  and turns out a moniker for it.
  77.  *
  78.  * Parameters:
  79.  *  pbc             LPBC to the binding context
  80.  *  pszName         LPOLESTR to the name to parse.
  81.  *  pchEaten        ULONG * into which to store how many
  82.  *                  characters we scanned in the display name.
  83.  *  ppmk            LPMONIKER * in which to return the moniker.
  84.  */
  85.  
  86. STDMETHODIMP CImpIOleItemContainer::ParseDisplayName(LPBC pbc
  87.     , LPOLESTR pszName, ULONG *pchEaten, LPMONIKER *ppmk)
  88.     {
  89.     *ppmk=NULL;
  90.     return ResultFromScode(E_NOTIMPL);
  91.     }
  92.  
  93.  
  94.  
  95.  
  96. /*
  97.  * CImpIOleItemContainer::EnumObjects
  98.  *
  99.  * Purpose:
  100.  *  Creates and returns an IEnumUnknown object that allows the
  101.  *  caller to walk through the objects in this continer thing.
  102.  *
  103.  * Parameters:
  104.  *  dwFlags         DWORD specifying what kind of objects to
  105.  *                  enumerate.
  106.  *  ppEnum          LPENUMUNKNOWN * into which to return the
  107.  *                  enumerator
  108.  */
  109.  
  110. STDMETHODIMP CImpIOleItemContainer::EnumObjects(DWORD dwFlags
  111.     , LPENUMUNKNOWN *ppEnum)
  112.     {
  113.     *ppEnum=NULL;
  114.     return ResultFromScode(E_NOTIMPL);
  115.     }
  116.  
  117.  
  118.  
  119.  
  120. /*
  121.  * CImpIOleItemContainer::LockContainer
  122.  *
  123.  * Purpose:
  124.  *  Establishes a lock on the container to prevent it from shutting
  125.  *  down outside of user control.  This is used to control the
  126.  *  lifetime of the container when it's used to update a link to an
  127.  *  embedded object within it.  If we're unlock and the user has not
  128.  *  taken control, we close.
  129.  *
  130.  * Parameters:
  131.  *  fLock           BOOL indicating a lock or unlock.
  132.  */
  133.  
  134. STDMETHODIMP CImpIOleItemContainer::LockContainer(BOOL fLock)
  135.     {
  136.     /*
  137.      * This is pretty much the same implementation as
  138.      * IClassFactory::LockServer, and we can use the same lock
  139.      * count to accomplish our goal.
  140.      */
  141.  
  142.     return ResultFromScode(E_NOTIMPL);
  143.     }
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150. /*
  151.  * CImpIOleItemContainer::GetObject
  152.  *
  153.  * Purpose:
  154.  *  Returns the requested interface pointer on an object in this
  155.  *  container.
  156.  *
  157.  * Parameters:
  158.  *  pszItem         LPOLESTR to the item we must locate.
  159.  *  dwSpeed         DWORD identifying how long the caller is willing
  160.  *                  to wait.
  161.  *  pcb             LPBINDCTX providing the binding context.
  162.  *  riid            REFIID of the interface requested.
  163.  *  ppv             LPVOID * into which to return the object.
  164.  */
  165.  
  166. STDMETHODIMP CImpIOleItemContainer::GetObject(LPOLESTR pszItem
  167.     , DWORD dwSpeed, LPBINDCTX pbc, REFIID riid, LPVOID *ppv)
  168.     {
  169.     *ppv=NULL;
  170.     return ResultFromScode(E_NOTIMPL);
  171.     }
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178. /*
  179.  * CImpIOleItemContainer::GetObjectStorage
  180.  *
  181.  * Purpose:
  182.  *  Similar to GetObject in that we have to locate the object
  183.  *  described by a given name, but instead of returning any old
  184.  *  interface we return a storage element.
  185.  *
  186.  * Parameters:
  187.  *  pszItem         LPOLESTR to the item we must locate.
  188.  *  pcb             LPBINDCTX providing the binding context.
  189.  *  riid            REFIID of the interface requested.  Usually
  190.  *                  IStorage or IStream.
  191.  *  ppv             LPVOID into which to return the object.
  192.  */
  193.  
  194. STDMETHODIMP CImpIOleItemContainer::GetObjectStorage(LPOLESTR pszItem
  195.     , LPBINDCTX pbc, REFIID riid, LPVOID *ppv)
  196.     {
  197.     *ppv=NULL;
  198.     return ResultFromScode(E_NOTIMPL);
  199.     }
  200.  
  201.  
  202.  
  203.  
  204.  
  205.  
  206. /*
  207.  * CImpIOleItemContainer::IsRunning
  208.  *
  209.  * Purpose:
  210.  *  Answers if the object under the given name is currently running.
  211.  *
  212.  * Parameters:
  213.  *  pszItem         LPOLESTR of the item to check
  214.  *
  215.  * Return Value:
  216.  *  HRESULT         NOERROR if the object is running, S_FALSE
  217.  *                  otherwise.  Possibly MK_E_NOOBJECT if the name
  218.  *                  is bogus.
  219.  */
  220.  
  221. STDMETHODIMP CImpIOleItemContainer::IsRunning(LPOLESTR pszItem)
  222.     {
  223.     return ResultFromScode(E_NOTIMPL);
  224.     }
  225.