home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / com / activedocument / doserver / oleobj.cpp < prev    next >
C/C++ Source or Header  |  1997-05-28  |  13KB  |  468 lines

  1. /**************************************************************************
  2.    THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
  3.    ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
  4.    THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
  5.    PARTICULAR PURPOSE.
  6.  
  7.    Copyright 1997 Microsoft Corporation.  All Rights Reserved.
  8. **************************************************************************/
  9.  
  10. /**************************************************************************
  11.  
  12.    File:          OleObj.cpp
  13.    
  14.    Description:   COleObject implementation.
  15.  
  16. **************************************************************************/
  17.  
  18. /**************************************************************************
  19.    #include statements
  20. **************************************************************************/
  21.  
  22. #include "OleObj.h"
  23.  
  24. /**************************************************************************
  25.  
  26.    COleObject::COleObject()
  27.    
  28. **************************************************************************/
  29.  
  30. COleObject::COleObject(COleDocument *pOleDoc)
  31. {
  32. OutputDebugString(TEXT("COleObject's constructor\n"));
  33.  
  34. m_pOleDoc = pOleDoc;
  35.  
  36. m_fOpen = FALSE;
  37. }
  38.  
  39. /**************************************************************************
  40.  
  41.    COleObject::~COleObject()
  42.    
  43. **************************************************************************/
  44.  
  45. COleObject::~COleObject()
  46. {
  47. OutputDebugString(TEXT("COleObject's destructor\n"));
  48. }
  49.  
  50. /**************************************************************************
  51.  
  52.    COleObject::QueryInterface()
  53.    
  54. **************************************************************************/
  55.  
  56. STDMETHODIMP COleObject::QueryInterface(REFIID riid, LPVOID *ppReturn)
  57. {
  58. OutputDebugString(TEXT("COleObject::QueryInterface\n"));
  59.  
  60. return m_pOleDoc->QueryInterface(riid, ppReturn);
  61. }
  62.  
  63. /**************************************************************************
  64.  
  65.    COleObject::AddRef()
  66.    
  67. **************************************************************************/
  68.  
  69. STDMETHODIMP_(ULONG) COleObject::AddRef()
  70. {
  71. OutputDebugString(TEXT("COleObject::AddRef\n"));
  72.  
  73. return m_pOleDoc->AddRef();
  74. }
  75.  
  76. /**************************************************************************
  77.  
  78.    COleObject::Release()
  79.    
  80. **************************************************************************/
  81.  
  82. STDMETHODIMP_(ULONG) COleObject::Release()
  83. {
  84. OutputDebugString(TEXT("COleObject::Release\n"));
  85.  
  86. return m_pOleDoc->Release();
  87. }
  88.  
  89. /**************************************************************************
  90.  
  91.    COleObject::DoVerb()
  92.    
  93. **************************************************************************/
  94.  
  95. STDMETHODIMP COleObject::DoVerb( LONG iVerb,
  96.                                  LPMSG lpmsg,
  97.                                  LPOLECLIENTSITE pActiveSite,
  98.                                  LONG lindex,
  99.                                  HWND hwndParent,
  100.                                  LPCRECT lprcPosRect)
  101. {
  102. OutputDebugString(TEXT("COleObject::DoVerb\n"));
  103.  
  104. HRESULT  hr = E_FAIL;
  105.  
  106. switch (iVerb)
  107.    {
  108.    case OLEIVERB_SHOW:
  109.    case OLEIVERB_PRIMARY:
  110.    case OLEIVERB_UIACTIVATE:
  111.       {
  112.       //try to get the IOleDocumentSite pointer
  113.       LPOLEDOCUMENTSITE pOleDocSite;
  114.       hr = pActiveSite->QueryInterface(IID_IOleDocumentSite, (LPVOID*)&pOleDocSite);
  115.       if(SUCCEEDED(hr))
  116.          {
  117.          //passing NULL to this will cause the site to call our CreateView method
  118.          hr = pOleDocSite->ActivateMe(NULL);
  119.          }
  120.       }
  121.       break;
  122.  
  123.    default:
  124.       break;
  125.    }
  126.  
  127. return hr;
  128. }
  129.  
  130. /**************************************************************************
  131.  
  132.    COleObject::GetClientSite()
  133.    
  134. **************************************************************************/
  135.  
  136. STDMETHODIMP COleObject::GetClientSite(LPOLECLIENTSITE *ppClientSite)
  137. {
  138. OutputDebugString(TEXT("COleObject::GetClientSite\n"));
  139.  
  140. *ppClientSite = m_pOleDoc->m_pOleClientSite;
  141.  
  142. return S_OK;
  143. }
  144.  
  145. /**************************************************************************
  146.  
  147.    COleObject::SetClientSite()
  148.    
  149. **************************************************************************/
  150.  
  151. STDMETHODIMP COleObject::SetClientSite(LPOLECLIENTSITE pClientSite)
  152. {
  153. OutputDebugString(TEXT("COleObject::SetClientSite\n"));
  154.  
  155. // if we already have a client site, release it.
  156. if(m_pOleDoc->m_pOleClientSite)
  157.    {
  158.    m_pOleDoc->m_pOleClientSite->Release();
  159.    m_pOleDoc->m_pOleClientSite = NULL;
  160.    }
  161.  
  162. // store copy of the client site.
  163. m_pOleDoc->m_pOleClientSite = pClientSite;
  164.  
  165. // AddRef it so it doesn't go away.
  166. if(m_pOleDoc->m_pOleClientSite)
  167.    m_pOleDoc->m_pOleClientSite->AddRef();
  168.  
  169. return S_OK;
  170. }
  171.  
  172. /**************************************************************************
  173.  
  174.    COleObject::Advise()
  175.    
  176. **************************************************************************/
  177.  
  178. STDMETHODIMP COleObject::Advise(LPADVISESINK pAdvSink, LPDWORD pdwConnection)
  179. {
  180. OutputDebugString(TEXT("COleObject::Advise\n"));
  181.  
  182. // if we haven't made an OleAdviseHolder yet, make one.
  183. if(!m_pOleDoc->m_pOleAdviseHolder)
  184.    CreateOleAdviseHolder(&m_pOleDoc->m_pOleAdviseHolder);
  185.  
  186. // pass this call onto the OleAdviseHolder.
  187. return m_pOleDoc->m_pOleAdviseHolder->Advise(pAdvSink, pdwConnection);
  188. }
  189.  
  190. /**************************************************************************
  191.  
  192.    COleObject::Unadvise()
  193.    
  194. **************************************************************************/
  195.  
  196. STDMETHODIMP COleObject::Unadvise(DWORD dwConnection)
  197. {
  198. OutputDebugString(TEXT("COleObject::Unadvise\n"));
  199.  
  200. // pass on to OleAdviseHolder.
  201. return m_pOleDoc->m_pOleAdviseHolder->Unadvise(dwConnection);
  202. }
  203.  
  204. /**************************************************************************
  205.  
  206.    COleObject::SetHostNames()
  207.    
  208. **************************************************************************/
  209.  
  210. STDMETHODIMP COleObject::SetHostNames(LPCOLESTR szContainerApp, LPCOLESTR szContainerObj)
  211. {
  212. OutputDebugString(TEXT("COleObject::SetHostNames\n"));
  213.  
  214. return S_OK;
  215. }
  216.  
  217. /**************************************************************************
  218.  
  219.    COleObject::GetExtent()
  220.    
  221. **************************************************************************/
  222.  
  223. STDMETHODIMP COleObject::GetExtent(DWORD dwDrawAspect, LPSIZEL lpsizel)
  224. {
  225. OutputDebugString(TEXT("COleObject::GetExtent\n"));
  226.  
  227. return E_NOTIMPL;
  228. }
  229.  
  230. /**************************************************************************
  231.  
  232.    COleObject::SetExtent()
  233.    
  234. **************************************************************************/
  235.  
  236. STDMETHODIMP COleObject::SetExtent(DWORD dwDrawAspect, LPSIZEL lpsizel)
  237. {
  238. OutputDebugString(TEXT("COleObject::SetExtent\n"));
  239.  
  240. return E_NOTIMPL;
  241. }
  242.  
  243. /**************************************************************************
  244.  
  245.    COleObject::Update()
  246.    
  247. **************************************************************************/
  248.  
  249. STDMETHODIMP COleObject::Update()
  250. {
  251. OutputDebugString(TEXT("COleObject::Update\n"));
  252.  
  253. return S_OK;
  254. }
  255.  
  256. /**************************************************************************
  257.  
  258.    COleObject::Close()
  259.    
  260. **************************************************************************/
  261.  
  262. STDMETHODIMP COleObject::Close(DWORD dwSaveOption)
  263. {
  264. OutputDebugString(TEXT("COleObject::Close\n"));
  265.  
  266. switch(dwSaveOption)
  267.    {
  268.    case OLECLOSE_SAVEIFDIRTY:
  269.       if(m_pOleDoc->m_fDirty)
  270.          {
  271.          m_pOleDoc->m_pPersistStorage->Save(NULL, TRUE);
  272.          }
  273.       break;
  274.  
  275.    case OLECLOSE_NOSAVE:
  276.       break;
  277.  
  278.    case OLECLOSE_PROMPTSAVE:
  279.       break;
  280.    }
  281.  
  282. //close the view
  283. m_pOleDoc->m_pOleDocView->CloseView(0);
  284.  
  285. return S_OK;
  286. }
  287.  
  288. /**************************************************************************
  289.  
  290.    COleObject::EnumVerbs()
  291.    
  292. **************************************************************************/
  293.  
  294. STDMETHODIMP COleObject::EnumVerbs(LPENUMOLEVERB *ppenumOleVerb)
  295. {
  296. OutputDebugString(TEXT("COleObject::EnumVerbs\n"));
  297.  
  298. return OLE_S_USEREG;
  299. }
  300.  
  301. /**************************************************************************
  302.  
  303.    COleObject::SetMoniker()
  304.    
  305. **************************************************************************/
  306.  
  307. STDMETHODIMP COleObject::SetMoniker(DWORD dwWhichMoniker, LPMONIKER pMoniker)
  308. {
  309. OutputDebugString(TEXT("COleObject::SetMoniker\n"));
  310.  
  311. LPMONIKER pTempMoniker;
  312.  
  313. if(!m_pOleDoc->m_pOleClientSite)
  314.    return E_FAIL;
  315.  
  316. if(NOERROR != m_pOleDoc->m_pOleClientSite->GetMoniker(OLEGETMONIKER_ONLYIFTHERE, OLEWHICHMK_OBJFULL, &pTempMoniker))
  317.    return E_FAIL;
  318.  
  319. if(m_pOleDoc->m_pOleAdviseHolder)
  320.    m_pOleDoc->m_pOleAdviseHolder->SendOnRename(pTempMoniker);
  321.  
  322. LPRUNNINGOBJECTTABLE pRot;
  323.  
  324. if(NOERROR == GetRunningObjectTable(0, &pRot))
  325.    {
  326.    if(m_pOleDoc->m_dwRegister)
  327.       pRot->Revoke(m_pOleDoc->m_dwRegister);
  328.  
  329.    pRot->Register(0, m_pOleDoc, pTempMoniker, &m_pOleDoc->m_dwRegister);
  330.  
  331.    pRot->Release();
  332.    }
  333.  
  334. return S_OK;
  335. }
  336.  
  337. /**************************************************************************
  338.  
  339.    COleObject::GetMoniker()
  340.    
  341. **************************************************************************/
  342.  
  343. STDMETHODIMP COleObject::GetMoniker(   DWORD dwAssign, 
  344.                                        DWORD dwWhichMoniker,
  345.                                        LPMONIKER *ppmk)
  346. {
  347. OutputDebugString(TEXT("COleObject::GetMoniker\n"));
  348.  
  349. *ppmk = NULL;
  350.  
  351. return m_pOleDoc->m_pOleClientSite->GetMoniker(OLEGETMONIKER_ONLYIFTHERE, OLEWHICHMK_OBJFULL, ppmk);
  352. }
  353.  
  354. /**************************************************************************
  355.  
  356.    COleObject::InitFromData()
  357.    
  358. **************************************************************************/
  359.  
  360. STDMETHODIMP COleObject::InitFromData( LPDATAOBJECT pDataObject,
  361.                                        BOOL fCreation,
  362.                                        DWORD dwReserved)
  363. {
  364. OutputDebugString(TEXT("COleObject::InitFromData\n"));
  365.  
  366. return E_NOTIMPL;
  367. }
  368.  
  369. /**************************************************************************
  370.  
  371.    COleObject::GetClipboardData()
  372.    
  373. **************************************************************************/
  374.  
  375. STDMETHODIMP COleObject::GetClipboardData(   DWORD dwReserved,
  376.                                              LPDATAOBJECT *ppDataObject)
  377. {
  378. OutputDebugString(TEXT("COleObject::GetClipboardData\n"));
  379.  
  380. *ppDataObject = NULL;
  381.  
  382. return E_NOTIMPL;
  383. }
  384.  
  385. /**************************************************************************
  386.  
  387.    COleObject::IsUpToDate()
  388.    
  389. **************************************************************************/
  390.  
  391. STDMETHODIMP COleObject::IsUpToDate()
  392. {
  393. OutputDebugString(TEXT("COleObject::IsUpToDate\n"));
  394.  
  395. return S_OK;
  396. }
  397.  
  398. /**************************************************************************
  399.  
  400.    COleObject::GetUserClassID()
  401.    
  402. **************************************************************************/
  403.  
  404. STDMETHODIMP COleObject::GetUserClassID(CLSID *pClsid)
  405. {
  406. OutputDebugString(TEXT("COleObject::GetUserClassID\n"));
  407.  
  408. return m_pOleDoc->m_pPersistStorage->GetClassID(pClsid);
  409. }
  410.  
  411. /**************************************************************************
  412.  
  413.    COleObject::GetUserType()
  414.    
  415. **************************************************************************/
  416.  
  417. STDMETHODIMP COleObject::GetUserType(DWORD dwFormOfType, LPOLESTR *pszUserType)
  418. {
  419. OutputDebugString(TEXT("COleObject::GetUserType\n"));
  420.  
  421. return OLE_S_USEREG;
  422. }
  423.  
  424. /**************************************************************************
  425.  
  426.    COleObject::EnumAdvise()
  427.    
  428. **************************************************************************/
  429.  
  430. STDMETHODIMP COleObject::EnumAdvise(LPENUMSTATDATA *ppenumAdvise)
  431. {
  432. OutputDebugString(TEXT("COleObject::EnumAdvise\n"));
  433.  
  434. *ppenumAdvise = NULL;
  435.  
  436. // pass on to the OLE Advise holder.
  437. return m_pOleDoc->m_pOleAdviseHolder->EnumAdvise(ppenumAdvise);
  438. }
  439.  
  440. /**************************************************************************
  441.  
  442.    COleObject::GetMiscStatus()
  443.    
  444. **************************************************************************/
  445.  
  446. STDMETHODIMP COleObject::GetMiscStatus(DWORD dwAspect, DWORD *pdwStatus)
  447. {
  448. OutputDebugString(TEXT("COleObject::GetMiscStatus\n"));
  449.  
  450. *pdwStatus = NULL;
  451.  
  452. return OLE_S_USEREG;
  453. }
  454.  
  455. /**************************************************************************
  456.  
  457.    COleObject::SetColorScheme()
  458.    
  459. **************************************************************************/
  460.  
  461. STDMETHODIMP COleObject::SetColorScheme(LPLOGPALETTE lpLogpal)
  462. {
  463. OutputDebugString(TEXT("COleObject::SetColorScheme\n"));
  464.  
  465. return S_OK;
  466. }
  467.  
  468.