Source code of Windows XP (NT5)
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.
|
|
#include <assert.h>
#include "ioipsite.h"
#include "iosite.h"
COleInPlaceSite::COleInPlaceSite(COleSite* pSite) { m_pOleSite = pSite; m_nCount = 0;
AddRef(); }
COleInPlaceSite::~COleInPlaceSite() { assert(m_nCount == 0); }
STDMETHODIMP COleInPlaceSite::QueryInterface(REFIID riid, LPVOID* ppvObj) { // delegate to the container Site
return m_pOleSite->QueryInterface(riid, ppvObj); }
STDMETHODIMP_(ULONG) COleInPlaceSite::AddRef() { return ++m_nCount; }
STDMETHODIMP_(ULONG) COleInPlaceSite::Release() { --m_nCount; if(m_nCount == 0) { delete this; return 0; } return m_nCount; }
STDMETHODIMP COleInPlaceSite::GetWindow (HWND* lphwnd) { // return the handle to our editing window.
*lphwnd = m_pOleSite->m_hWnd;
return ResultFromScode(S_OK); }
STDMETHODIMP COleInPlaceSite::ContextSensitiveHelp (BOOL fEnterMode) { return ResultFromScode(S_OK); }
STDMETHODIMP COleInPlaceSite::CanInPlaceActivate () { return ResultFromScode(S_OK); }
STDMETHODIMP COleInPlaceSite::OnInPlaceActivate () { HRESULT hrErr;
hrErr = m_pOleSite->m_lpOleObject->QueryInterface(IID_IOleInPlaceObject, (LPVOID*)&m_pOleSite->m_lpInPlaceObject); if (hrErr != NOERROR) return ResultFromScode(E_FAIL);
// return S_OK to indicate we can in-place activate.
return ResultFromScode(S_OK); }
STDMETHODIMP COleInPlaceSite::OnUIActivate () { m_pOleSite->m_fInPlaceActive = TRUE;
m_pOleSite->m_lpInPlaceObject->GetWindow((HWND*)&m_pOleSite->m_hwndIPObj);
// return S_OK to continue in-place activation
return ResultFromScode(S_OK); }
STDMETHODIMP COleInPlaceSite::GetWindowContext (LPOLEINPLACEFRAME* lplpFrame, LPOLEINPLACEUIWINDOW* lplpDoc, LPRECT lprcPosRect, LPRECT lprcClipRect, LPOLEINPLACEFRAMEINFO lpFrameInfo) { RECT rect;
// the frame is associated with the application object.
// need to AddRef() it...
m_pOleSite->m_pOleInPlaceFrame->AddRef(); *lplpFrame = m_pOleSite->m_pOleInPlaceFrame; *lplpDoc = NULL; // must be NULL, cause we're SDI.
// get the size of the object in pixels
GetClientRect(m_pOleSite->m_hWnd, &rect);
// Copy this to the passed buffer
CopyRect(lprcPosRect, &rect);
// fill the clipping region
GetClientRect(m_pOleSite->m_hWnd, &rect); CopyRect(lprcClipRect, &rect);
// fill the FRAMEINFO
lpFrameInfo->fMDIApp = FALSE; lpFrameInfo->hwndFrame = m_pOleSite->m_hWnd; lpFrameInfo->haccel = NULL; lpFrameInfo->cAccelEntries = 0;
return ResultFromScode(S_OK); }
STDMETHODIMP COleInPlaceSite::Scroll (SIZE scrollExtent) { return ResultFromScode(E_FAIL); }
STDMETHODIMP COleInPlaceSite::OnUIDeactivate (BOOL fUndoable) { // need to clear this flag first
m_pOleSite->m_fInPlaceActive = FALSE;
return ResultFromScode(S_OK); }
STDMETHODIMP COleInPlaceSite::OnInPlaceDeactivate () { if (m_pOleSite->m_lpInPlaceObject) { m_pOleSite->m_lpInPlaceObject->Release(); m_pOleSite->m_lpInPlaceObject = NULL; } return ResultFromScode(S_OK); }
STDMETHODIMP COleInPlaceSite::DiscardUndoState () { return ResultFromScode(E_FAIL); }
STDMETHODIMP COleInPlaceSite::DeactivateAndUndo () { return ResultFromScode(E_FAIL); }
STDMETHODIMP COleInPlaceSite::OnPosRectChange (LPCRECT lprcPosRect) { return ResultFromScode(S_OK); }
|