Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*
* IDOCSITE.CPP * IOleDocumentSite for Document Objects CSite class * * Copyright (c)1995-1999 Microsoft Corporation, All Rights Reserved */
#include "stdafx.h"
#include <docobj.h>
#include "DHTMLEd.h"
#include "DHTMLEdit.h"
#include "site.h"
#include "proxyframe.h"
/**
Note: the m_cRef count is provided for debugging purposes only. CSite controls the destruction of the object through delete, not reference counting */
/*
* CImpIOleDocumentSite::CImpIOleDocumentSite * CImpIOleDocumentSite::~CImpIOleDocumentSite * * Parameters (Constructor): * pSite PCSite of the site we're in. * pUnkOuter LPUNKNOWN to which we delegate. */ CImpIOleDocumentSite::CImpIOleDocumentSite( PCSite pSite, LPUNKNOWN pUnkOuter) { m_cRef = 0; m_pSite = pSite; m_pUnkOuter = pUnkOuter; }
CImpIOleDocumentSite::~CImpIOleDocumentSite( void ) { }
/*
* CImpIOleDocumentSite::QueryInterface * CImpIOleDocumentSite::AddRef * CImpIOleDocumentSite::Release * * Purpose: * IUnknown members for CImpIOleDocumentSite object. */ STDMETHODIMP CImpIOleDocumentSite::QueryInterface( REFIID riid, void **ppv ) { return m_pUnkOuter->QueryInterface( riid, ppv ); }
STDMETHODIMP_(ULONG) CImpIOleDocumentSite::AddRef( void ) { ++m_cRef; return m_pUnkOuter->AddRef(); }
STDMETHODIMP_(ULONG) CImpIOleDocumentSite::Release( void ) { --m_cRef; return m_pUnkOuter->Release(); }
/*
* CImpIOleDocumentsite::ActivateMe * * Purpose: * Instructs the container to activate the object in this site as * a document object. * * Parameters: * pView IOleDocumentView * of the object to activate. * * Return Value: * HRESULT S_OK if successful, error code otherwise. */ STDMETHODIMP CImpIOleDocumentSite::ActivateMe( IOleDocumentView *pView ) { RECT rc; IOleDocument* pDoc; /*
* If we're passed a NULL view pointer, then try to get one from * the document object (the object within us). */ if ( NULL == pView ) { if ( FAILED( m_pSite->GetObjectUnknown()->QueryInterface( IID_IOleDocument, (void **)&pDoc ) ) ) { return E_FAIL; }
if ( FAILED( pDoc->CreateView( m_pSite->GetIPSite(), NULL, 0, &pView ) ) ) { pDoc->Release(); return E_OUTOFMEMORY; }
// Release doc pointer since CreateView is a good com method that addrefs
pDoc->Release(); } else { IOleInPlaceSite* pInplaceSite = NULL; pView->GetInPlaceSite(&pInplaceSite); if(pInplaceSite != m_pSite->GetIPSite()) { //Make sure that the view has our client site
pView->SetInPlaceSite( m_pSite->GetIPSite() );
}
//We're holding onto the pointer, so AddRef it.
pView->AddRef();
if(pInplaceSite) pInplaceSite->Release(); }
// Activation steps, now that we have a view:
m_pSite->SetDocView( pView ); //This sets up toolbars and menus first
pView->UIActivate( TRUE );
//Set the window size sensitive to new toolbars
m_pSite->GetFrame()->GetControl()->GetClientRect( &rc ); pView->SetRect( &rc );
//Makes it all active
pView->Show( TRUE ); return S_OK; }
|