//+--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1992 - 1997. // // File: clnthndlr.cpp // // Contents: // // Classes: // // Functions: // // History: 10-10-95 JohannP (Johann Posch) Created // 12-03-96 rogerg Changed to New Embed ServerHandler Model. // //---------------------------------------------------------------------------- #include #include #include // CStdIdentity #include "srvhdl.h" #include "clthndlr.h" ASSERTDATA //+--------------------------------------------------------------------------- // // Function: CreateClientSiteHandler // // Synopsis: // // Arguments: [pOCS] -- // [ppClntHdlr] -- // // Returns: // // History: 11-10-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- HRESULT CreateClientSiteHandler(IOleClientSite *pOCS, CClientSiteHandler **ppClntHdlr, BOOL *pfHasIPSite) { HRESULT hr = NOERROR; LEDebugOut((DEB_TRACE, "IN CreateClientSiteHandler(pOCS:%p)\n",pOCS)); *ppClntHdlr = new CClientSiteHandler(pOCS); if (*ppClntHdlr) { *pfHasIPSite = (*ppClntHdlr)->m_pOIPS ? TRUE: FALSE; } else { hr = E_OUTOFMEMORY; } LEDebugOut((DEB_TRACE, "OUT CreateClientSiteHandler(ppSrvHdlr:%p) return %lx\n",*ppClntHdlr,hr)); return hr; } //+--------------------------------------------------------------------------- // // Method: CClientSiteHandler::CClientSiteHandler // // Synopsis: // // Arguments: (none) // // Returns: // // History: 9-22-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- CClientSiteHandler::CClientSiteHandler(IOleClientSite *pOCS) { Win4Assert(pOCS); m_cRefs = 1; m_pOIPS = NULL; m_pOCS = pOCS; if (m_pOCS) { m_pOCS->AddRef(); // see if Supports InPlaceSite and if so hold onto it. if (FAILED(m_pOCS->QueryInterface(IID_IOleInPlaceSite,(void **) &m_pOIPS))) { m_pOIPS = NULL; } } } //+--------------------------------------------------------------------------- // // Method: CClientSiteHandler::~CClientSiteHandler // // Synopsis: // // Arguments: (none) // // Returns: // // History: 9-22-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- CClientSiteHandler::~CClientSiteHandler() { Win4Assert(m_pOIPS == NULL); Win4Assert(m_pOCS == NULL); } //+--------------------------------------------------------------------------- // // Method: CClientSiteHandler::QueryInterface // // Synopsis: // // Arguments: [riid] -- // [ppv] -- // // Returns: // // History: 8-18-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CClientSiteHandler::QueryInterface( REFIID riid, void **ppv) { HRESULT hresult = NOERROR; VDATEHEAP(); LEDebugOut((DEB_TRACE, "%p _IN CClientSiteHandler::QueryInterface (%lx, %p)\n", this, riid, ppv)); if (IsEqualIID(riid, IID_IUnknown) || IsEqualIID(riid, IID_IClientSiteHandler) ) { *ppv = (void FAR *)(IClientSiteHandler *)this; InterlockedIncrement((long *)&m_cRefs); } else { hresult = m_pOCS->QueryInterface(riid,ppv); } LEDebugOut((DEB_TRACE, "%p OUT CClientSiteHandler::QueryInterface (%lx)[%p]\n", this, hresult, *ppv)); return hresult; } //+--------------------------------------------------------------------------- // // Method: CClientSiteHandler::AddRef // // Synopsis: // // Arguments: [void] -- // // Returns: // // History: 8-18-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP_(ULONG) CClientSiteHandler::AddRef( void ) { VDATEHEAP(); LEDebugOut((DEB_TRACE, "%p _IN CClientSiteHandler::AddRef\n", this)); InterlockedIncrement((long *)&m_cRefs); LEDebugOut((DEB_TRACE, "%p OUT CClientSiteHandler::AddRef (%ld)\n", this, m_cRefs)); return m_cRefs; } //+--------------------------------------------------------------------------- // // Method: CClientSiteHandler::Release // // Synopsis: // // Arguments: [void] -- // // Returns: // // History: 8-18-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP_(ULONG) CClientSiteHandler::Release( void ) { ULONG cRefs = 0; VDATEHEAP(); LEDebugOut((DEB_TRACE, "%p _IN CClientSiteHandler::Release\n", this)); cRefs = InterlockedDecrement((long *)&m_cRefs); if (cRefs == 0) { LPUNKNOWN punk; // local var for safe release if (m_pOIPS) { punk = (LPUNKNOWN) m_pOIPS; m_pOIPS = NULL; punk->Release(); } if (m_pOCS) { punk = (LPUNKNOWN) m_pOCS; m_pOCS = NULL; punk->Release(); } delete this; } LEDebugOut((DEB_TRACE, "%p OUT CClientSiteHandler::Release (%ld)\n", this, cRefs)); return cRefs; } //+--------------------------------------------------------------------------- // // Method: CClientSiteHandler::GetContainer // // Synopsis: delegates call on to appropriate OleClientSite // // Arguments: [dwId] -- id of the OleClientSite the call should be delegate too // [ppContainer] -- // // Returns: // // History: 11-17-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CClientSiteHandler::GetContainer(IOleContainer * *ppContainer) { HRESULT hresult = E_FAIL; VDATEHEAP(); LEDebugOut((DEB_TRACE, "%p _IN CClientSiteHandler::GetContainer\n", this)); Win4Assert(m_pOCS); if (m_pOCS) { hresult = m_pOCS->GetContainer(ppContainer); } LEDebugOut((DEB_TRACE, "%p OUT CClientSiteHandler::GetContainer hr=%lx\n", this, hresult)); return hresult; } //+--------------------------------------------------------------------------- // // Method: CClientSiteHandler::OnShowWindow // // Synopsis: delegates call on to appropriate OleClientSite // // Arguments: [dwId] -- id of the OleClientSite the call should be delegate too // [fShow] -- // // Returns: // // History: 11-17-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CClientSiteHandler::OnShowWindow(BOOL fShow) { HRESULT hresult = E_FAIL; VDATEHEAP(); LEDebugOut((DEB_TRACE, "%p _IN CClientSiteHandler::OnShowWindow\n", this)); Win4Assert(m_pOCS); if (m_pOCS) { hresult = m_pOCS->OnShowWindow(fShow); } LEDebugOut((DEB_TRACE, "%p OUT CClientSiteHandler::OnShowWindow hr=%lx\n", this, hresult)); return hresult; } //+--------------------------------------------------------------------------- // // Method: CClientSiteHandler::RequestNewObjectLayout // // Synopsis: delegates call on to appropriate OleClientSite // // Arguments: [dwId] -- id of the OleClientSite the call should be delegate too // // Returns: // // History: 11-17-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CClientSiteHandler::RequestNewObjectLayout() { HRESULT hresult = E_FAIL; VDATEHEAP(); LEDebugOut((DEB_TRACE, "%p _IN CClientSiteHandler::RequestNewObjectLayout\n", this)); Win4Assert(m_pOCS); if (m_pOCS) { hresult = m_pOCS->RequestNewObjectLayout(); } LEDebugOut((DEB_TRACE, "%p OUT CClientSiteHandler::RequestNewObjectLayout hr=%lx\n", this, hresult)); return hresult; } //+--------------------------------------------------------------------------- // // Method: CClientSiteHandler::GetMoniker // // Synopsis: delegates call on to appropriate OleClientSite // // Arguments: [dwId] -- id of the OleClientSite the call should be delegate too // [DWORD] -- // [IMoniker] -- // [ppmk] -- // // Returns: // // History: 11-17-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CClientSiteHandler::GetMoniker(DWORD dwAssign,DWORD dwWhichMoniker,IMoniker * *ppmk) { HRESULT hresult = E_FAIL; VDATEHEAP(); LEDebugOut((DEB_TRACE, "%p _IN CClientSiteHandler::GetMoniker\n", this)); Win4Assert(m_pOCS); if (m_pOCS) { hresult = m_pOCS->GetMoniker(dwAssign, dwWhichMoniker,ppmk); } LEDebugOut((DEB_TRACE, "%p OUT CClientSiteHandler::GetMoniker hr=%lx\n", this, hresult)); return hresult; } //+--------------------------------------------------------------------------- // // Method: CClientSiteHandler::SaveObject // // Synopsis: delegates call on to appropriate OleClientSite // // Arguments: [dwId] -- id of the OleClientSite the call should be delegate too // // Returns: // // History: 11-17-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CClientSiteHandler::SaveObject( ) { HRESULT hresult = E_FAIL; VDATEHEAP(); LEDebugOut((DEB_TRACE, "%p _IN CClientSiteHandler::SaveObject\n", this)); Win4Assert(m_pOCS); if (m_pOCS) { hresult = m_pOCS->SaveObject(); } LEDebugOut((DEB_TRACE, "%p OUT CClientSiteHandler::SaveObject hr=%lx\n", this, hresult)); return hresult; } //+--------------------------------------------------------------------------- // // Method: CClientSiteHandler::ShowObject // // Synopsis: delegates call on to appropriate OleClientSite // // Arguments: [dwId] -- id of the OleClientSite the call should be delegate too // // Returns: // // History: 11-17-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CClientSiteHandler::ShowObject() { HRESULT hresult = E_FAIL; VDATEHEAP(); LEDebugOut((DEB_TRACE, "%p _IN CClientSiteHandler::ShowObject\n", this)); Win4Assert(m_pOCS); if (m_pOCS) { hresult = m_pOCS->ShowObject(); } LEDebugOut((DEB_TRACE, "%p OUT CClientSiteHandler::ShowObject hr=%lx\n", this, hresult)); return hresult; } // // IOleInPlaceSite methods // //+--------------------------------------------------------------------------- // // Method: CClientSiteHandler::GetWindow // // Synopsis: delegates call on to OleInPlaceSite // // Arguments: [phwnd] -- // // Returns: // // History: 11-17-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CClientSiteHandler::GetWindow( HWND *phwnd) { HRESULT hresult = E_FAIL; VDATEHEAP(); LEDebugOut((DEB_TRACE, "%p _IN CClientSiteHandler::GetWindow\n", this)); Win4Assert(m_pOIPS); if (m_pOIPS) { hresult = m_pOIPS->GetWindow(phwnd); } LEDebugOut((DEB_TRACE, "%p OUT CClientSiteHandler::GetWindow hr=%lx\n", this, hresult)); return hresult; } //+--------------------------------------------------------------------------- // // Method: CClientSiteHandler::ContextSensitiveHelp // // Synopsis: delegates call on to OleInPlaceSite // // Arguments: [fEnterMode] -- // // Returns: // // History: 11-17-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CClientSiteHandler::ContextSensitiveHelp(BOOL fEnterMode) { HRESULT hresult = E_FAIL; VDATEHEAP(); LEDebugOut((DEB_TRACE, "%p _IN CClientSiteHandler::ContextSensitiveHelp\n", this)); Win4Assert(m_pOIPS); if (m_pOIPS) { hresult = m_pOIPS->ContextSensitiveHelp(fEnterMode); } LEDebugOut((DEB_TRACE, "%p OUT CClientSiteHandler::ContextSensitiveHelp hr=%lx\n", this, hresult)); return hresult; } //+--------------------------------------------------------------------------- // // Method: CClientSiteHandler::CanInPlaceActivate // // Synopsis: delegates call on to OleInPlaceSite // // Arguments: [void] -- // // Returns: // // History: 11-17-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CClientSiteHandler::CanInPlaceActivate(void) { HRESULT hresult = E_FAIL; VDATEHEAP(); LEDebugOut((DEB_TRACE, "%p _IN CClientSiteHandler::CanInPlaceActivate\n", this)); Win4Assert(m_pOIPS); if (m_pOIPS) { hresult = m_pOIPS->CanInPlaceActivate(); } LEDebugOut((DEB_TRACE, "%p OUT CClientSiteHandler::CanInPlaceActivate hr=%lx\n", this, hresult)); return hresult; } //+--------------------------------------------------------------------------- // // Method: CClientSiteHandler::OnInPlaceActivate // // Synopsis: delegates call on to OleInPlaceSite // // Arguments: [void] -- // // Returns: // // History: 11-17-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CClientSiteHandler::OnInPlaceActivate(void) { HRESULT hresult = E_FAIL; VDATEHEAP(); LEDebugOut((DEB_TRACE, "%p _IN CClientSiteHandler::OnInPlaceActivate\n", this)); Win4Assert(m_pOIPS); if (m_pOIPS) { hresult = m_pOIPS->OnInPlaceActivate(); } LEDebugOut((DEB_TRACE, "%p OUT CClientSiteHandler::OnInPlaceActivate hr=%lx\n", this, hresult)); return hresult; } //+--------------------------------------------------------------------------- // // Method: CClientSiteHandler::OnUIActivate // // Synopsis: delegates call on to OleInPlaceSite // // Arguments: [void] -- // // Returns: // // History: 11-17-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CClientSiteHandler::OnUIActivate(void) { HRESULT hresult = E_FAIL; VDATEHEAP(); LEDebugOut((DEB_TRACE, "%p _IN CClientSiteHandler::OnUIActivate\n", this)); Win4Assert(m_pOIPS); if (m_pOIPS) { hresult = m_pOIPS->OnUIActivate(); } LEDebugOut((DEB_TRACE, "%p OUT CClientSiteHandler::OnUIActivate hr=%lx\n", this, hresult)); return hresult; } //+--------------------------------------------------------------------------- // // Method: CClientSiteHandler::GetWindowContext // // Synopsis: delegates call on to OleInPlaceSite // // Arguments: [ppFrame] -- // [ppDoc] -- // [lprcPosRect] -- // [lprcClipRect] -- // [lpFrameInfo] -- // // Returns: // // History: 11-17-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CClientSiteHandler::GetWindowContext(IOleInPlaceFrame **ppFrame, IOleInPlaceUIWindow * *ppDoc, LPRECT lprcPosRect, LPRECT lprcClipRect, LPOLEINPLACEFRAMEINFO lpFrameInfo) { HRESULT hresult = E_FAIL; VDATEHEAP(); LEDebugOut((DEB_TRACE, "%p _IN CClientSiteHandler::GetWindowContext\n", this)); Win4Assert(m_pOIPS); if (m_pOIPS) { hresult = m_pOIPS->GetWindowContext(ppFrame, ppDoc, lprcPosRect, lprcClipRect, lpFrameInfo); } LEDebugOut((DEB_TRACE, "%p OUT CClientSiteHandler::GetWindowContext hr=%lx\n", this, hresult)); return hresult; } //+--------------------------------------------------------------------------- // // Method: CClientSiteHandler::Scroll // // Synopsis: delegates call on to OleInPlaceSite // // Arguments: [scrollExtant] -- // // Returns: // // History: 11-17-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CClientSiteHandler::Scroll(SIZE scrollExtant) { HRESULT hresult = E_FAIL; VDATEHEAP(); LEDebugOut((DEB_TRACE, "%p _IN CClientSiteHandler::Scroll\n", this)); Win4Assert(m_pOIPS); if (m_pOIPS) { hresult = m_pOIPS->Scroll(scrollExtant); } LEDebugOut((DEB_TRACE, "%p OUT CClientSiteHandler::Scroll hr=%lx\n", this, hresult)); return hresult; } //+--------------------------------------------------------------------------- // // Method: CClientSiteHandler::OnUIDeactivate // // Synopsis: delegates call on to OleInPlaceSite // // Arguments: [fUndoable] -- // // Returns: // // History: 11-17-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CClientSiteHandler::OnUIDeactivate(BOOL fUndoable) { HRESULT hresult = E_FAIL; VDATEHEAP(); LEDebugOut((DEB_TRACE, "%p _IN CClientSiteHandler::OnUIDeactivate\n", this)); Win4Assert(m_pOIPS); if (m_pOIPS) { hresult = m_pOIPS->OnUIDeactivate(fUndoable); } LEDebugOut((DEB_TRACE, "%p OUT CClientSiteHandler::OnUIDeactivate hr=%lx\n", this, hresult)); return hresult; } //+--------------------------------------------------------------------------- // // Method: CClientSiteHandler::OnInPlaceDeactivate // // Synopsis: delegates call on to OleInPlaceSite // // Arguments: [void] -- // // Returns: // // History: 11-17-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CClientSiteHandler::OnInPlaceDeactivate( void) { HRESULT hresult = E_FAIL; VDATEHEAP(); LEDebugOut((DEB_TRACE, "%p _IN CClientSiteHandler::OnInPlaceDeactivate\n", this)); Win4Assert(m_pOIPS); if (m_pOIPS) { hresult = m_pOIPS->OnInPlaceDeactivate(); } LEDebugOut((DEB_TRACE, "%p OUT CClientSiteHandler::OnInPlaceDeactivate hr=%lx\n", this, hresult)); return hresult; } //+--------------------------------------------------------------------------- // // Method: CClientSiteHandler::DiscardUndoState // // Synopsis: delegates call on to OleInPlaceSite // // Arguments: [void] -- // // Returns: // // History: 11-17-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CClientSiteHandler::DiscardUndoState(void) { HRESULT hresult = E_FAIL; VDATEHEAP(); LEDebugOut((DEB_TRACE, "%p _IN CClientSiteHandler::DiscardUndoState\n", this)); Win4Assert(m_pOIPS); if (m_pOIPS) { hresult = m_pOIPS->DiscardUndoState(); } LEDebugOut((DEB_TRACE, "%p OUT CClientSiteHandler::DiscardUndoState hr=%lx\n", this, hresult)); return hresult; } //+--------------------------------------------------------------------------- // // Method: CClientSiteHandler::DeactivateAndUndo // // Synopsis: delegates call on to OleInPlaceSite // // Arguments: [void] -- // // Returns: // // History: 11-17-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CClientSiteHandler::DeactivateAndUndo(void) { HRESULT hresult = E_FAIL; VDATEHEAP(); LEDebugOut((DEB_TRACE, "%p _IN CClientSiteHandler::DeactivateAndUndo\n", this)); Win4Assert(m_pOIPS); if (m_pOIPS) { hresult = m_pOIPS->DeactivateAndUndo(); } LEDebugOut((DEB_TRACE, "%p OUT CClientSiteHandler::DeactivateAndUndo hr=%lx\n", this, hresult)); return hresult; } //+--------------------------------------------------------------------------- // // Method: CClientSiteHandler::OnPosRectChange // // Synopsis: delegates call on to OleInPlaceSite // // Arguments: [lprcPosRect] -- // // Returns: // // History: 11-17-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CClientSiteHandler::OnPosRectChange(LPCRECT lprcPosRect) { HRESULT hresult = E_FAIL; VDATEHEAP(); LEDebugOut((DEB_TRACE, "%p _IN CClientSiteHandler::OnPosRectChange\n", this)); Win4Assert(m_pOIPS); if (m_pOIPS) { hresult = m_pOIPS->OnPosRectChange(lprcPosRect); } LEDebugOut((DEB_TRACE, "%p OUT CClientSiteHandler::OnPosRectChange hr=%lx\n", this, hresult)); return hresult; } // // ClientSiteHandler methods // //+--------------------------------------------------------------------------- // // Method: CClientSiteHandler::GoInPlaceActivate // // Synopsis: called by the serverhandler when going inplace // // Arguments: [phwndOIPS] -- // // Returns: // // History: 11-17-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CClientSiteHandler::GoInPlaceActivate(HWND *phwndOIPS) { HRESULT hresult = E_FAIL; VDATEHEAP(); LEDebugOut((DEB_TRACE, "%p _IN CClientSiteHandler::GoInPlaceActivate\n", this)); Win4Assert(m_pOIPS); *phwndOIPS = NULL; if (m_pOIPS) { // 1. OnInPlaceActivate hresult = m_pOIPS->OnInPlaceActivate(); // 2. Get the Site Window, not an error if this fails if (SUCCEEDED(hresult)) { if (NOERROR != m_pOIPS->GetWindow(phwndOIPS)) { *phwndOIPS = NULL; } } } LEDebugOut((DEB_TRACE, "%p OUT CClientSiteHandler::GoInPlaceActivate\n", this)); return hresult; } // ClientSiteHandler on ServerSide //+--------------------------------------------------------------------------- // // Method: CEmbServerClientSite::CEmbServerClientSite // // Synopsis: Constructor // // Arguments: // pStdId - Pointer to StandardIdentity for Object // // Returns: // // History: 10-30-96 rogerg Created // // Notes: // //---------------------------------------------------------------------------- CEmbServerClientSite::CEmbServerClientSite (IUnknown *pUnkOuter) { VDATEHEAP(); if (!pUnkOuter) { pUnkOuter = &m_Unknown; } m_pUnkOuter = pUnkOuter; m_pClientSiteHandler = NULL; m_cRefs = 1; m_pUnkInternal = NULL; m_hwndOIPS = NULL; m_Unknown.m_EmbServerClientSite = this; m_fInDelete = FALSE; } //+--------------------------------------------------------------------------- // // Method: CEmbServerClientSite::Initialize // // Synopsis: Initialize the ClientSiteHandler // // Arguments: // objref - objref to be unmarshaled // fHasIPSite - Indicates if ClientSite should support IOleInPlaceSite // // Returns: // // History: 10-30-96 rogerg Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CEmbServerClientSite::Initialize(OBJREF objref,BOOL fHasIPSite) { HRESULT hr = E_OUTOFMEMORY; CStdIdentity *pStdId; BOOL fSuccess = FALSE; // Need to create a Standard Identity Handler // as the controlling Unknown, then unmarshal pIRDClientsite // into it. // This code relies on the premise that this is the first time the // interface has been unmarshaled which is checked for on the Container Side m_fHasIPSite = fHasIPSite; pStdId = new CStdIdentity(STDID_CLIENT, GetCurrentApartmentId(), m_pUnkOuter, NULL, &m_pUnkInternal, &fSuccess); if (pStdId && fSuccess == FALSE) { delete pStdId; pStdId = NULL; } if (pStdId) { LPUNKNOWN pObjRefInterface = NULL; Win4Assert(IsEqualIID(objref.iid, IID_IClientSiteHandler)); hr = pStdId->UnmarshalObjRef(objref, (void **)&m_pClientSiteHandler); if (NOERROR == hr) { m_pUnkOuter->Release(); // Release ref from UnMarshal } } return hr; } //+--------------------------------------------------------------------------- // // Method: CEmbServerClientSite::SetDoVerbState // // Synopsis: Informs ClientSiteHandler if a DoVerb is in progress // // Arguments: // // Returns: // // History: 10-30-96 rogerg Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CEmbServerClientSite::SetDoVerbState(BOOL fDoVerbState) { m_fInDoVerb = fDoVerbState ? TRUE: FALSE; if (!m_fInDoVerb) { // reset any data the is Cached while in a DoVerb. m_hwndOIPS = NULL; } return NOERROR; } //+--------------------------------------------------------------------------- // // Method: CEmbServerClientSite::~CEmbServerClientSite // // Synopsis: Destructor // // Arguments: (none) // // Returns: // // History: 10-30-96 rogerg Created // // Notes: // //---------------------------------------------------------------------------- CEmbServerClientSite::~CEmbServerClientSite() { Win4Assert(NULL == m_pClientSiteHandler); Win4Assert(NULL == m_pUnkInternal); Win4Assert(TRUE == m_fInDelete); } // // Controlling Uknown // // //+------------------------------------------------------------------------- // // Member: CEmbServerClientSite::CPrivUnknown::QueryInterface // // Synopsis: Returns a pointer to one of the supported interfaces. // // Effects: // // Arguments: [iid] -- the requested interface ID // [ppv] -- where to put the iface pointer // // Requires: // // Returns: HRESULT // // History: 10-30-96 rogerg Created // // Notes: // //-------------------------------------------------------------------------- STDMETHODIMP CEmbServerClientSite::CPrivUnknown::QueryInterface(REFIID iid, LPLPVOID ppv) { HRESULT hresult; VDATEHEAP(); Win4Assert(m_EmbServerClientSite); LEDebugOut((DEB_TRACE, "%p _IN CDefObject::CUnknownImpl::QueryInterface " "( %p , %p )\n", m_EmbServerClientSite, iid, ppv)); if (IsEqualIID(iid, IID_IUnknown)) { *ppv = (void FAR *)this; } else if (IsEqualIID(iid, IID_IOleClientSite)) { *ppv = (void FAR *)(IOleClientSite *) m_EmbServerClientSite; } else if (IsEqualIID(iid, IID_IOleInPlaceSite) && (m_EmbServerClientSite->m_fHasIPSite)) { *ppv = (void FAR *)(IOleInPlaceSite *) m_EmbServerClientSite; } else if(m_EmbServerClientSite->m_pUnkInternal) { hresult = m_EmbServerClientSite->m_pUnkInternal->QueryInterface(iid,(void **) ppv); LEDebugOut((DEB_TRACE, "%p OUT CDefObject::CUnknownImpl::QueryInterface " "( %lx ) [ %p ]\n", m_EmbServerClientSite, hresult, (ppv) ? *ppv : 0 )); return hresult; } else { // Don't have a ClientSite. *ppv = NULL; LEDebugOut((DEB_TRACE, "%p OUT CDefObject::CUnkownImpl::QueryInterface " "( %lx ) [ %p ]\n", m_EmbServerClientSite, CO_E_OBJNOTCONNECTED, 0 )); return E_NOINTERFACE; } // this indirection is important since there are different // implementationsof AddRef (this unk and the others). ((IUnknown FAR*) *ppv)->AddRef(); LEDebugOut((DEB_TRACE, "%p OUT CDefObject::CUnknownImpl::QueryInterface " "( %lx ) [ %p ]\n", m_EmbServerClientSite, NOERROR, *ppv)); return NOERROR; } //+------------------------------------------------------------------------- // // Member: CEmbServerClientSite::CPrivUnknown::AddRef // // Synopsis: Increments the reference count. // // Effects: // // Arguments: void // // Requires: // // Returns: ULONG (the new reference count) // // History: 10-30-96 rogerg Created // // Notes: // //-------------------------------------------------------------------------- STDMETHODIMP_(ULONG) CEmbServerClientSite::CPrivUnknown::AddRef( void ) { ULONG cRefs; VDATEHEAP(); LEDebugOut((DEB_TRACE, "%p _IN CDefObject::CPrivUnknown::AddRef " "( )\n", m_EmbServerClientSite)); Win4Assert(m_EmbServerClientSite); cRefs = InterlockedIncrement((long *) &(m_EmbServerClientSite->m_cRefs)); LEDebugOut((DEB_TRACE, "%p OUT CDefObject::CPrivUnknown::AddRef " "( %lu )\n", m_EmbServerClientSite, m_EmbServerClientSite->m_cRefs)); return cRefs; } //+------------------------------------------------------------------------- // // Member: CEmbServerClientSite::CPrivUnknown::Release // // Synopsis: Decrements the ref count, cleaning up and deleting the // object if necessary // // Effects: May delete the object (and potentially objects to which the // handler has pointer) // // Arguments: void // // Requires: // // Returns: ULONG--the new ref count // // History: 10-30-96 rogerg Created // // Notes: // //-------------------------------------------------------------------------- STDMETHODIMP_(ULONG) CEmbServerClientSite::CPrivUnknown::Release(void) { ULONG refcount; VDATEHEAP(); LEDebugOut((DEB_TRACE, "%p _IN CDefObject::CPrivUnknown::Release " "( )\n", m_EmbServerClientSite)); Win4Assert(m_EmbServerClientSite); refcount = InterlockedDecrement((long *) &(m_EmbServerClientSite->m_cRefs)); // TODO: not thread safe. if (0 == refcount && !(m_EmbServerClientSite->m_fInDelete)) { m_EmbServerClientSite->m_fInDelete = TRUE; if (m_EmbServerClientSite->m_pClientSiteHandler) { LPUNKNOWN lpUnkForSafeRelease = m_EmbServerClientSite->m_pClientSiteHandler; m_EmbServerClientSite->m_pClientSiteHandler = NULL; m_EmbServerClientSite->m_pUnkOuter->AddRef(); lpUnkForSafeRelease->Release(); } if (m_EmbServerClientSite->m_pUnkInternal) { LPUNKNOWN pUnkSafeRelease; pUnkSafeRelease = m_EmbServerClientSite->m_pUnkInternal; m_EmbServerClientSite->m_pUnkInternal = NULL; pUnkSafeRelease->Release(); } delete m_EmbServerClientSite; } LEDebugOut((DEB_TRACE, "%p OUT CDefObject::CPrivUnknown::Release " "( %lu )\n", m_EmbServerClientSite, refcount)); return refcount; } //+--------------------------------------------------------------------------- // // Method: CEmbServerClientSite::QueryInterface // // Synopsis: // // Arguments: [riid] -- // [ppv] -- // // Returns: // // History: 9-18-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CEmbServerClientSite::QueryInterface( REFIID riid, void **ppv ) { HRESULT hresult = E_NOINTERFACE; VDATEHEAP(); LEDebugOut((DEB_TRACE, "%p _IN CDefObject::QueryInterface ( %lx , " "%p )\n", this, riid, ppv)); Win4Assert(m_pUnkOuter); hresult = m_pUnkOuter->QueryInterface(riid, ppv); LEDebugOut((DEB_TRACE, "%p OUT CDefObject::QueryInterface ( %lx ) " "[ %p ]\n", this, hresult, *ppv)); return hresult; } //+--------------------------------------------------------------------------- // // Method: CEmbServerClientSite::AddRef // // Synopsis: // // Arguments: [void] -- // // Returns: // // History: 9-18-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP_(ULONG) CEmbServerClientSite::AddRef( void ) { ULONG crefs;; VDATEHEAP(); LEDebugOut((DEB_TRACE, "%p _IN CDefObject::AddRef ( )\n", this)); Assert(m_pUnkOuter); crefs = m_pUnkOuter->AddRef(); LEDebugOut((DEB_TRACE, "%p OUT CDefObject::AddRef ( %ld ) ", this, crefs)); return crefs; } //+--------------------------------------------------------------------------- // // Method: CEmbServerClientSite::Release // // Synopsis: // // Arguments: [void] -- // // Returns: // // History: 9-18-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP_(ULONG) CEmbServerClientSite::Release( void ) { ULONG crefs;; VDATEHEAP(); LEDebugOut((DEB_TRACE, "%p _IN CDefObject::Release ( )\n", this)); Assert(m_pUnkOuter); crefs = m_pUnkOuter->Release(); LEDebugOut((DEB_TRACE, "%p OUT CDefObject::Release ( %ld ) ", this, crefs)); return crefs; } //+--------------------------------------------------------------------------- // // Method: CEmbServerClientSite::GetContainer // // Synopsis: // // Arguments: [ppContainer] -- // // Returns: // // History: 11-17-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CEmbServerClientSite::GetContainer(IOleContainer **ppContainer) { HRESULT hresult = E_FAIL; LEDebugOut((DEB_TRACE, "%p _IN CEmbServerClientSite::COleClientSiteImplGetContainer\n", this)); Win4Assert(m_pClientSiteHandler); if (m_pClientSiteHandler) { hresult = m_pClientSiteHandler->GetContainer(ppContainer); } LEDebugOut((DEB_TRACE, "%p OUT CEmbServerClientSite::COleClientSiteImplGetContainer return %lx\n", this, hresult)); return hresult; } //+--------------------------------------------------------------------------- // // Method: CEmbServerClientSite::ShowObject // // Synopsis: // // Arguments: [void] -- // // Returns: // // History: 11-17-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CEmbServerClientSite::ShowObject( void) { HRESULT hresult = E_FAIL; LEDebugOut((DEB_TRACE, "%p _IN CEmbServerClientSite::COleClientSiteImplShowObject\n", this)); Win4Assert(m_pClientSiteHandler); if (m_pClientSiteHandler) { hresult = m_pClientSiteHandler->ShowObject(); } LEDebugOut((DEB_TRACE, "%p OUT CEmbServerClientSite::COleClientSiteImplShowObject return %lx\n", this, hresult)); return hresult; } //+--------------------------------------------------------------------------- // // Method: CEmbServerClientSite::COleClientSiteImplOnShowWindow // // Synopsis: // // Arguments: [fShow] -- // // Returns: // // History: 11-17-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CEmbServerClientSite::OnShowWindow(BOOL fShow) { HRESULT hresult = E_FAIL; LEDebugOut((DEB_TRACE, "%p _IN CEmbServerClientSite::COleClientSiteImplOnShowWindow\n", this)); Win4Assert(m_pClientSiteHandler); if (m_pClientSiteHandler) { hresult = m_pClientSiteHandler->OnShowWindow(fShow); } LEDebugOut((DEB_TRACE, "%p OUT CEmbServerClientSite::COleClientSiteImplOnShowWindow return %lx\n", this, hresult)); return hresult; } //+--------------------------------------------------------------------------- // // Method: CEmbServerClientSite::COleClientSiteImplRequestNewObjectLayout // // Synopsis: // // Arguments: [void] -- // // Returns: // // History: 11-17-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CEmbServerClientSite::RequestNewObjectLayout(void) { HRESULT hresult = E_FAIL; LEDebugOut((DEB_TRACE, "%p _IN CEmbServerClientSite::COleClientSiteImplRequestNewObjectLayout\n", this)); Win4Assert(m_pClientSiteHandler); if (m_pClientSiteHandler) { hresult = m_pClientSiteHandler->RequestNewObjectLayout(); } LEDebugOut((DEB_TRACE, "%p OUT CEmbServerClientSite::COleClientSiteImplRequestNewObjectLayout return %lx\n", this, hresult)); return hresult; } //+--------------------------------------------------------------------------- // // Method: CEmbServerClientSite::COleClientSiteImplSaveObject // // Synopsis: // // Arguments: [void] -- // // Returns: // // History: 11-17-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CEmbServerClientSite::SaveObject(void) { HRESULT hresult = E_FAIL; LEDebugOut((DEB_TRACE, "%p _IN CEmbServerClientSite::COleClientSiteImplSaveObject\n", this)); Win4Assert(m_pClientSiteHandler); if (m_pClientSiteHandler) { hresult = m_pClientSiteHandler->SaveObject(); } LEDebugOut((DEB_TRACE, "%p OUT CEmbServerClientSite::COleClientSiteImplSaveObject return %lx\n", this, hresult)); return hresult; } //+--------------------------------------------------------------------------- // // Method: CEmbServerClientSite::COleClientSiteImplGetMoniker // // Synopsis: // // Arguments: [dwAssign] -- // [dwWhichMoniker] -- // [ppmk] -- // // Returns: // // History: 11-17-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CEmbServerClientSite::GetMoniker(DWORD dwAssign,DWORD dwWhichMoniker,IMoniker **ppmk) { HRESULT hresult = E_FAIL; LEDebugOut((DEB_TRACE, "%p _IN CEmbServerClientSite::COleClientSiteImplGetMoniker\n", this)); Win4Assert(m_pClientSiteHandler); if (m_pClientSiteHandler) { hresult = m_pClientSiteHandler->GetMoniker(dwAssign, dwWhichMoniker, ppmk); } LEDebugOut((DEB_TRACE, "%p OUT CEmbServerClientSite::COleClientSiteImplGetMoniker return %lx\n", this, hresult)); return hresult; } // IOleWindow Methods //+--------------------------------------------------------------------------- // // Method: CEmbServerClientSite::GetWindow // // Synopsis: // // Arguments: [phwnd] -- // // Returns: // // History: 11-17-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CEmbServerClientSite::GetWindow(HWND *phwnd) { HRESULT hresult = NOERROR; LEDebugOut((DEB_TRACE, "%p _IN CEmbServerClientSite::GetWindow\n", this)); *phwnd = NULL; if ( m_fInDoVerb && m_hwndOIPS ) { *phwnd = m_hwndOIPS; } else { Win4Assert(m_pClientSiteHandler); if (m_pClientSiteHandler) { hresult = m_pClientSiteHandler->GetWindow(phwnd); } else { hresult = E_FAIL; } if (NOERROR == hresult) { m_hwndOIPS = *phwnd; } } LEDebugOut((DEB_TRACE, "%p OUT CEmbServerClientSite::COleCInPlaceSiteImpl::GetWindow return %lx\n", this, hresult)); return hresult; } // // IOleInPlaceSite Methods // //+--------------------------------------------------------------------------- // // Method: CEmbServerClientSite::ContextSensitiveHelp // // Synopsis: // // Arguments: [fEnterMode] -- // // Returns: // // History: 11-17-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CEmbServerClientSite::ContextSensitiveHelp(BOOL fEnterMode) { HRESULT hresult = E_FAIL; LEDebugOut((DEB_TRACE, "%p _IN CEmbServerClientSite::COleCInPlaceSiteImpl::ContextSensitiveHelp\n", this)); Win4Assert(m_pClientSiteHandler); if (m_pClientSiteHandler) { hresult = m_pClientSiteHandler->ContextSensitiveHelp(fEnterMode); } LEDebugOut((DEB_TRACE, "%p OUT CEmbServerClientSite::COleCInPlaceSiteImpl::ContextSensitiveHelp return %lx\n", this, hresult)); return hresult; } //+--------------------------------------------------------------------------- // // Method: CEmbServerClientSite::CanInPlaceActivate // // Synopsis: // // Arguments: [] -- // // Returns: // // History: 11-17-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CEmbServerClientSite::CanInPlaceActivate( void) { HRESULT hresult = E_FAIL; LEDebugOut((DEB_TRACE, "%p _IN CEmbServerClientSite::CanInPlaceActivate\n", this)); Win4Assert(m_pClientSiteHandler); if (m_pClientSiteHandler) { hresult = m_pClientSiteHandler->CanInPlaceActivate(); } LEDebugOut((DEB_TRACE, "%p OUT CEmbServerClientSite::CanInPlaceActivate return %lx\n", this, hresult)); return hresult; } //+--------------------------------------------------------------------------- // // Method: CEmbServerClientSite::OnInPlaceActivate // // Synopsis: // // Arguments: [void] -- // // Returns: // // History: 11-17-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CEmbServerClientSite::OnInPlaceActivate( void) { HRESULT hresult = E_FAIL; LEDebugOut((DEB_TRACE, "%p _IN CEmbServerClientSite::OnInPlaceActivate\n", this)); Win4Assert(m_pClientSiteHandler); if (m_pClientSiteHandler) { if (m_fInDoVerb ) { // call back to client site hresult = m_pClientSiteHandler->GoInPlaceActivate(&m_hwndOIPS); if (FAILED(hresult)) { // on failure make sure out params for caching are NULL; m_hwndOIPS = NULL; } } else { hresult = m_pClientSiteHandler->OnInPlaceActivate(); } } LEDebugOut((DEB_TRACE, "%p OUT CEmbServerClientSite::OnInPlaceActivate return %lx\n", this, hresult)); return hresult; } //+--------------------------------------------------------------------------- // // Method: CEmbServerClientSite::OnUIActivate // // Synopsis: // // Arguments: [void] -- // // Returns: // // History: 11-17-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CEmbServerClientSite::OnUIActivate( void) { HRESULT hresult = E_FAIL; LEDebugOut((DEB_TRACE, "%p _IN CEmbServerClientSite::OnUIActivate\n", this)); Win4Assert(m_pClientSiteHandler); if (m_pClientSiteHandler) { hresult = m_pClientSiteHandler->OnUIActivate(); } LEDebugOut((DEB_TRACE, "%p OUT CEmbServerClientSite::OnUIActivate return %lx\n", this, hresult)); return hresult; } //+--------------------------------------------------------------------------- // // Method: CEmbServerClientSite::GetWindowContext // // Synopsis: // // Arguments: [ppFrame] -- // [ppDoc] -- // [lprcPosRect] -- // [lprcClipRect] -- // [lpFrameInfo] -- // // Returns: // // History: 11-17-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CEmbServerClientSite::GetWindowContext(IOleInPlaceFrame **ppFrame, IOleInPlaceUIWindow **ppDoc,LPRECT lprcPosRect,LPRECT lprcClipRect, LPOLEINPLACEFRAMEINFO lpFrameInfo) { HRESULT hresult = E_FAIL; LEDebugOut((DEB_TRACE, "%p _IN CEmbServerClientSite::GetWindowContext\n", this)); Win4Assert(m_pClientSiteHandler); if (m_pClientSiteHandler) { hresult = m_pClientSiteHandler->GetWindowContext(ppFrame, ppDoc,lprcPosRect, lprcClipRect, lpFrameInfo); } LEDebugOut((DEB_TRACE, "%p OUT CEmbServerClientSite::GetWindowContext return %lx\n", this, hresult)); return hresult; } //+--------------------------------------------------------------------------- // // Method: CEmbServerClientSite::Scroll // // Synopsis: // // Arguments: [scrollExtant] -- // // Returns: // // History: 11-17-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CEmbServerClientSite::Scroll(SIZE scrollExtant) { HRESULT hresult = E_FAIL; LEDebugOut((DEB_TRACE, "%p _IN CEmbServerClientSite::Scroll\n", this)); Win4Assert(m_pClientSiteHandler); if (m_pClientSiteHandler) { hresult = m_pClientSiteHandler->Scroll(scrollExtant); } LEDebugOut((DEB_TRACE, "%p OUT CEmbServerClientSite::Scroll return %lx\n", this, hresult)); return hresult; } //+--------------------------------------------------------------------------- // // Method: CEmbServerClientSite::OnUIDeactivate // // Synopsis: // // Arguments: [fUndoable] -- // // Returns: // // History: 11-17-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CEmbServerClientSite::OnUIDeactivate(BOOL fUndoable) { HRESULT hresult = E_FAIL; LEDebugOut((DEB_TRACE, "%p _IN CEmbServerClientSite::OnUIDeactivate\n", this)); Win4Assert(m_pClientSiteHandler); if (m_pClientSiteHandler) { hresult = m_pClientSiteHandler->OnUIDeactivate(fUndoable); } LEDebugOut((DEB_TRACE, "%p OUT CEmbServerClientSite::OnUIDeactivate return %lx\n", this, hresult)); return hresult; } //+--------------------------------------------------------------------------- // // Method: CEmbServerClientSite::OnInPlaceDeactivate // // Synopsis: // // Arguments: [void] -- // // Returns: // // History: 11-17-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CEmbServerClientSite::OnInPlaceDeactivate(void) { HRESULT hresult = E_FAIL; LEDebugOut((DEB_TRACE, "%p _IN CEmbServerClientSite::OnInPlaceDeactivate\n", this)); Win4Assert(m_pClientSiteHandler); if (m_pClientSiteHandler) { hresult = m_pClientSiteHandler->OnInPlaceDeactivate(); } LEDebugOut((DEB_TRACE, "%p OUT CEmbServerClientSite::OnInPlaceDeactivate return %lx\n", this, hresult)); return hresult; } //+--------------------------------------------------------------------------- // // Method: CEmbServerClientSite::DiscardUndoState // // Synopsis: // // Arguments: [void] -- // // Returns: // // History: 11-17-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CEmbServerClientSite::DiscardUndoState(void) { HRESULT hresult = E_FAIL; LEDebugOut((DEB_TRACE, "%p _IN CEmbServerClientSite::DiscardUndoState\n", this)); Win4Assert(m_pClientSiteHandler); if (m_pClientSiteHandler) { hresult = m_pClientSiteHandler->DiscardUndoState(); } LEDebugOut((DEB_TRACE, "%p OUT CEmbServerClientSite::DiscardUndoState return %lx\n", this, hresult)); return hresult; } //+--------------------------------------------------------------------------- // // Method: CEmbServerClientSite::DeactivateAndUndo // // Synopsis: // // Arguments: [void] -- // // Returns: // // History: 11-17-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CEmbServerClientSite::DeactivateAndUndo(void) { HRESULT hresult = E_FAIL; LEDebugOut((DEB_TRACE, "%p _IN CEmbServerClientSite::DeactivateAndUndo\n", this)); Win4Assert(m_pClientSiteHandler); if (m_pClientSiteHandler) { hresult = m_pClientSiteHandler->DeactivateAndUndo(); } LEDebugOut((DEB_TRACE, "%p OUT CEmbServerClientSite::DeactivateAndUndo return %lx\n", this, hresult)); return hresult; } //+--------------------------------------------------------------------------- // // Method: CEmbServerClientSite::OnPosRectChange // // Synopsis: // // Arguments: [lprcPosRect] -- // // Returns: // // History: 11-17-95 JohannP (Johann Posch) Created // // Notes: // //---------------------------------------------------------------------------- STDMETHODIMP CEmbServerClientSite::OnPosRectChange(LPCRECT lprcPosRect) { HRESULT hresult = E_FAIL; LEDebugOut((DEB_TRACE, "%p _IN CEmbServerClientSite::OnPosRectChange\n", this)); Win4Assert(m_pClientSiteHandler); if (m_pClientSiteHandler) { hresult = m_pClientSiteHandler->OnPosRectChange(lprcPosRect); } LEDebugOut((DEB_TRACE, "%p OUT CEmbServerClientSite::OnPosRectChange return %lx\n", this, hresult)); return hresult; }