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.
145 lines
3.4 KiB
145 lines
3.4 KiB
/*
|
|
* 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;
|
|
}
|