IOLEOBJ.CPP
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:11k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /*
  2.  * IOLEOBJ.CPP
  3.  *
  4.  * Template IOleObject interface implementation.
  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. #include "ioleobj.h"
  13. /*
  14.  * CImpIOleObject::CImpIOleObject
  15.  * CImpIOleObject::~CImpIOleObject
  16.  *
  17.  * Parameters (Constructor):
  18.  *  pObj            LPVOID of the object we're in.
  19.  *  pUnkOuter       LPUNKNOWN to which we delegate.
  20.  */
  21. CImpIOleObject::CImpIOleObject(LPVOID pObj, LPUNKNOWN pUnkOuter)
  22.     {
  23.     m_cRef=0;
  24.     m_pObj=pObj;
  25.     m_pUnkOuter=pUnkOuter;
  26.     return;
  27.     }
  28. CImpIOleObject::~CImpIOleObject(void)
  29.     {
  30.     return;
  31.     }
  32. /*
  33.  * CImpIOleObject::QueryInterface
  34.  * CImpIOleObject::AddRef
  35.  * CImpIOleObject::Release
  36.  *
  37.  * Purpose:
  38.  *  Delegating IUnknown members for CImpIOleObject.
  39.  */
  40. STDMETHODIMP CImpIOleObject::QueryInterface(REFIID riid
  41.     , LPVOID *ppv)
  42.     {
  43.     return m_pUnkOuter->QueryInterface(riid, ppv);
  44.     }
  45. STDMETHODIMP_(ULONG) CImpIOleObject::AddRef(void)
  46.     {
  47.     ++m_cRef;
  48.     return m_pUnkOuter->AddRef();
  49.     }
  50. STDMETHODIMP_(ULONG) CImpIOleObject::Release(void)
  51.     {
  52.     --m_cRef;
  53.     return m_pUnkOuter->Release();
  54.     }
  55. /*
  56.  * CImpIOleObject::SetClientSite
  57.  *
  58.  * Purpose:
  59.  *  Provides the object with a pointer to the IOleClient site
  60.  *  representing the container in which this object resides.
  61.  *
  62.  * Parameters:
  63.  *  pIOleClientSite LPOLECLIENTSITE to the container's interface.
  64.  */
  65. STDMETHODIMP CImpIOleObject::SetClientSite
  66.     (LPOLECLIENTSITE pIOleClientSite)
  67.     {
  68.     return NOERROR;
  69.     }
  70. /*
  71.  * CImpIOleObject::GetClientSite
  72.  *
  73.  * Purpose:
  74.  *  Asks the object for the client site provided in SetClientSite.
  75.  *  If you have not seen SetClientSite yet, return a NULL in
  76.  *  ppIOleClientSite.
  77.  *
  78.  * Parameters:
  79.  *  ppIOleClientSite    LPOLECLIENTSITE * in which to store
  80.  *                      the pointer.
  81.  */
  82. STDMETHODIMP CImpIOleObject::GetClientSite(LPOLECLIENTSITE
  83.     *ppIOleClientSite)
  84.     {
  85.     return ResultFromScode(E_NOTIMPL);
  86.     }
  87. /*
  88.  * CImpIOleObject::SetHostNames
  89.  *
  90.  * Purpose:
  91.  *  Provides the object with names of the container application and
  92.  *  the object in the container to use in object user interface.
  93.  *
  94.  * Parameters:
  95.  *  pszApp          LPCOLESTR of the container application.
  96.  *  pszObj          LPCOLESTR of some name useful in window titles.
  97.  */
  98. STDMETHODIMP CImpIOleObject::SetHostNames(LPCOLESTR pszApp
  99.     , LPCOLESTR pszObj)
  100.     {
  101.     return ResultFromScode(E_NOTIMPL);
  102.     }
  103. /*
  104.  * CImpIOleObject::Close
  105.  *
  106.  * Purpose:
  107.  *  Forces the object to close down its user interface and unload.
  108.  *
  109.  * Parameters:
  110.  *  dwSaveOption    DWORD describing the circumstances under which
  111.  *                  the object is being saved and closed.
  112.  */
  113. STDMETHODIMP CImpIOleObject::Close(DWORD dwSaveOption)
  114.     {
  115.     return ResultFromScode(E_NOTIMPL);
  116.     }
  117. /*
  118.  * CImpIOleObject::SetMoniker
  119.  *
  120.  * Purpose:
  121.  *  Informs the object of its moniker or its container's moniker
  122.  *  depending on dwWhich.
  123.  *
  124.  * Parameters:
  125.  *  dwWhich         DWORD describing whether the moniker is the
  126.  *                  object's or the container's.
  127.  *  pmk             LPMONIKER with the name.
  128.  */
  129. STDMETHODIMP CImpIOleObject::SetMoniker(DWORD dwWhich
  130.     , LPMONIKER pmk)
  131.     {
  132.     return ResultFromScode(E_NOTIMPL);
  133.     }
  134. /*
  135.  * CImpIOleObject::GetMoniker
  136.  *
  137.  * Purpose:
  138.  *  Asks the object for a moniker that can later be used to
  139.  *  reconnect to it.
  140.  *
  141.  * Parameters:
  142.  *  dwAssign        DWORD determining how to assign the moniker to
  143.  *                  to the object.
  144.  *  dwWhich         DWORD describing which moniker the caller wants.
  145.  *  ppmk            LPMONIKER * into which to store the moniker.
  146.  */
  147. STDMETHODIMP CImpIOleObject::GetMoniker(DWORD dwAssign
  148.     , DWORD dwWhichMoniker, LPMONIKER *ppmk)
  149.     {
  150.     return ResultFromScode(E_NOTIMPL);
  151.     }
  152. /*
  153.  * CImpIOleObject::InitFromData
  154.  *
  155.  * Purpose:
  156.  *  Initilizes the object from the contents of a data object.
  157.  *
  158.  * Parameters:
  159.  *  pIDataObject    LPDATAOBJECT containing the data.
  160.  *  fCreation       BOOL indicating if this is part of a new
  161.  *                  creation.  If FALSE, the container is trying
  162.  *                  to paste here.
  163.  *  dwReserved      DWORD reserved.
  164.  */
  165. STDMETHODIMP CImpIOleObject::InitFromData(LPDATAOBJECT pIDataObject
  166.     , BOOL fCreation, DWORD dwReserved)
  167.     {
  168.     return ResultFromScode(E_NOTIMPL);
  169.     }
  170. /*
  171.  * CImpIOleObject::GetClipboardData
  172.  *
  173.  * Purpose:
  174.  *  Returns an IDataObject pointer to the caller representing what
  175.  *  would be on the clipboard if the server did an Edit/Copy using
  176.  *  OleSetClipboard.
  177.  *
  178.  * Parameters:
  179.  *  dwReserved      DWORD reserved.
  180.  *  ppIDataObj      LPDATAOBJECT * into which to store the
  181.  *                  pointer.
  182.  */
  183. STDMETHODIMP CImpIOleObject::GetClipboardData(DWORD dwReserved
  184.     , LPDATAOBJECT *ppIDataObj)
  185.     {
  186.     return ResultFromScode(E_NOTIMPL);
  187.     }
  188. /*
  189.  * CImpIOleObject::DoVerb
  190.  *
  191.  * Purpose:
  192.  *  Executes an object-defined action.
  193.  *
  194.  * Parameters:
  195.  *  iVerb           LONG index of the verb to execute.
  196.  *  pMSG            LPMSG describing the event causing the
  197.  *                  activation.
  198.  *  pIOleClientSite LPOLECLIENTSITE to the site involved.
  199.  *  lIndex          LONG the piece on which execution is happening.
  200.  *  hWndParent      HWND of the window in which the object can play
  201.  *                  in-place.
  202.  *  pRectPos        LPRECT of the object in hWndParent where the
  203.  *                  object can play in-place if desired.
  204.  */
  205. STDMETHODIMP CImpIOleObject::DoVerb(LONG iVerb, LPMSG PMSG
  206.     , LPOLECLIENTSITE pIOleClientSite, LONG lIndex
  207.     , HWND hWndParent, LPCRECT pRectPos)
  208.     {
  209.     return ResultFromScode(E_NOTIMPL);
  210.     }
  211. /*
  212.  * CImpIOleObject::EnumVerbs
  213.  *
  214.  * Purpose:
  215.  *  Creates an enumerator that knows the object's verbs.  If you
  216.  *  need to change the verb list dynamically, then you'll need to
  217.  *  implement this, otherwise you can return OLE_S_USEREG.
  218.  *
  219.  * Parameters:
  220.  *  ppEnum          LPENUMOLEVERB * into which to return the
  221.  *                  enum.
  222.  */
  223. STDMETHODIMP CImpIOleObject::EnumVerbs(LPENUMOLEVERB *ppEnum)
  224.     {
  225.     //Trivial implementation if you fill the regDB.
  226.     return ResultFromScode(OLE_S_USEREG);
  227.     }
  228. /*
  229.  * CImpIOleObject::Update
  230.  *
  231.  * Purpose:
  232.  *  Insures that the object is up to date.  This is mostly used for
  233.  *  caching but you must make sure that you recursively call all
  234.  *  nested objects you contain as well.
  235.  *
  236.  * Parameters:
  237.  *  None
  238.  */
  239. STDMETHODIMP CImpIOleObject::Update(void)
  240.     {
  241.     return ResultFromScode(E_NOTIMPL);
  242.     }
  243. /*
  244.  * CImpIOleObject::IsUpToDate
  245.  *
  246.  * Purpose:
  247.  *  Returns if the object is currently up to date, which involves
  248.  *  asking all contained object inside this object if they are up
  249.  *  to date as well.
  250.  *
  251.  * Parameters:
  252.  *  None
  253.  *
  254.  * Return Value:
  255.  *  HRESULT         NOERROR if successful, S_FALSE if dirty.
  256.  */
  257. STDMETHODIMP CImpIOleObject::IsUpToDate(void)
  258.     {
  259.     return NOERROR;
  260.     }
  261. /*
  262.  * CImpIOleObject::GetUserClassID
  263.  *
  264.  * Purpose:
  265.  *  Used for linked objects, this returns the class ID of what end
  266.  *  users think they are editing.
  267.  *
  268.  * Parameters:
  269.  *  pClsID          LPCLSID in which to store the CLSID.
  270.  */
  271. STDMETHODIMP CImpIOleObject::GetUserClassID(LPCLSID pClsID)
  272.     {
  273.     return ResultFromScode(E_NOTIMPL);
  274.     }
  275. /*
  276.  * CImpIOleObject::GetUserType
  277.  *
  278.  * Purpose:
  279.  *  Determines the user-presentable name of the object.
  280.  *
  281.  * Parameters:
  282.  *  dwForm          DWORD describing which form of the string
  283.  *                  is desired.
  284.  *  pszType         LPTSTR * into which to return the pointer to
  285.  *                  the type string.
  286.  */
  287. STDMETHODIMP CImpIOleObject::GetUserType(DWORD dwForm
  288.     , LPTSTR *ppszType)
  289.     {
  290.     return ResultFromScode(OLE_S_USEREG);
  291.     }
  292. /*
  293.  * CImpIOleObject::SetExtent
  294.  *
  295.  * Purpose:
  296.  *  Sets the size of the object in HIMETRIC units.
  297.  *
  298.  * Parameters:
  299.  *  dwAspect        DWORD of the aspect affected.
  300.  *  pszl            LPSIZEL containing the new size.
  301.  */
  302. STDMETHODIMP CImpIOleObject::SetExtent(DWORD dwAspect, LPSIZEL pszl)
  303.     {
  304.     return ResultFromScode(E_NOTIMPL);
  305.     }
  306. /*
  307.  * CImpIOleObject::GetExtent
  308.  *
  309.  * Purpose:
  310.  *  Retrieves the size of the object in HIMETRIC units.
  311.  *
  312.  * Parameters:
  313.  *  dwAspect        DWORD of the aspect requested
  314.  *  pszl            LPSIZEL into which to store the size.
  315.  */
  316. STDMETHODIMP CImpIOleObject::GetExtent(DWORD dwAspect, LPSIZEL pszl)
  317.     {
  318.     return ResultFromScode(E_NOTIMPL);
  319.     }
  320. /*
  321.  * CImpIOleObject::Advise
  322.  *
  323.  * Purpose:
  324.  *  Provides an IAdviseSink to the object for notifications.
  325.  *
  326.  * Parameters:
  327.  *  pIAdviseSink    LPADVISESINK to notify.
  328.  *  pdwConn         LPDWORD into which to store a connection key.
  329.  */
  330. STDMETHODIMP CImpIOleObject::Advise(LPADVISESINK pIAdviseSink
  331.     , LPDWORD pdwConn)
  332.     {
  333.     return ResultFromScode(E_NOTIMPL);
  334.     }
  335. /*
  336.  * CImpIOleObject::Unadvise
  337.  *
  338.  * Purpose:
  339.  *  Terminates a previous advise connection from Advise.
  340.  *
  341.  * Parameters:
  342.  *  dwConn          DWORD connection key from Advise.
  343.  */
  344. STDMETHODIMP CImpIOleObject::Unadvise(DWORD dwConn)
  345.     {
  346.     return ResultFromScode(E_NOTIMPL);
  347.     }
  348. /*
  349.  * CImpIOleObject::EnumAdvise
  350.  *
  351.  * Purpose:
  352.  *  Creates and returns a enumeration of the advises on this object.
  353.  *
  354.  * Parameters:
  355.  *  ppEnum          LPENUMSTATDATA * in which to return the
  356.  *                  enumerator.
  357.  */
  358. STDMETHODIMP CImpIOleObject::EnumAdvise(LPENUMSTATDATA *ppEnum)
  359.     {
  360.     return ResultFromScode(E_NOTIMPL);
  361.     }
  362. /*
  363.  * CImpIOleObject::GetMiscStatus
  364.  *
  365.  * Purpose:
  366.  *  Returns a set of miscellaneous status flags for the object.
  367.  *
  368.  * Parameters:
  369.  *  dwAspect        DWORD of the aspect in question.
  370.  *  pdwStatus       LPDWORD in which to store the flags.
  371.  */
  372. STDMETHODIMP CImpIOleObject::GetMiscStatus(DWORD dwAspect
  373.     , LPDWORD pdwStatus)
  374.     {
  375.     return ResultFromScode(OLE_S_USEREG);
  376.     }
  377. /*
  378.  * CImpIOleObject::SetColorScheme
  379.  *
  380.  * Purpose:
  381.  *  Provides the object with the color palette as recommended by
  382.  *  the container application that also knows the palettes of other
  383.  *  objects.  The object here is not required to use these colors.
  384.  *
  385.  * Parameters:
  386.  *  pLP             LPLOGPALETTE providing the colors.
  387.  */
  388. STDMETHODIMP CImpIOleObject::SetColorScheme(LPLOGPALETTE pLP)
  389.     {
  390.     return ResultFromScode(E_NOTIMPL);
  391.     }