diff options
author | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
---|---|---|
committer | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
commit | e611b132f9b8abe35b362e5870b74bce94a1e58e (patch) | |
tree | a5781d2ec0e085eeca33cf350cf878f2efea6fe5 /private/oleutest/simpcntr/ioips.cpp | |
download | NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2 NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip |
Diffstat (limited to 'private/oleutest/simpcntr/ioips.cpp')
-rw-r--r-- | private/oleutest/simpcntr/ioips.cpp | 615 |
1 files changed, 615 insertions, 0 deletions
diff --git a/private/oleutest/simpcntr/ioips.cpp b/private/oleutest/simpcntr/ioips.cpp new file mode 100644 index 000000000..f8a97be22 --- /dev/null +++ b/private/oleutest/simpcntr/ioips.cpp @@ -0,0 +1,615 @@ +//********************************************************************** +// File name: IOIPS.CPP +// +// Implementation file for COleInPlaceSite +// +// Functions: +// +// See IOIPS.H for class Definition +// +// Copyright (c) 1992 - 1993 Microsoft Corporation. All rights reserved. +//********************************************************************** + +#include "pre.h" +#include "iocs.h" +#include "ias.h" +#include "ioipf.h" +#include "ioips.h" +#include "app.h" +#include "site.h" +#include "doc.h" + +//********************************************************************** +// +// COleInPlaceSite::QueryInterface +// +// Purpose: +// +// Used for interface negotiation +// +// Parameters: +// +// REFIID riid - A reference to the interface that is +// being queried. +// +// LPVOID FAR* ppvObj - An out parameter to return a pointer to +// the interface. +// +// Return Value: +// +// S_OK - The interface is supported. +// S_FALSE - The interface is not supported +// +// Function Calls: +// Function Location +// +// TestDebugOut Windows API +// CSimpleSite::QueryInterface SITE.CPP +// +// +//******************************************************************** + +STDMETHODIMP COleInPlaceSite::QueryInterface(REFIID riid, LPVOID FAR* ppvObj) +{ + TestDebugOut(TEXT("In IOIPS::QueryInterface\r\n")); + + // delegate to the container Site + return m_pSite->QueryInterface(riid, ppvObj); +} + +//********************************************************************** +// +// COleInPlaceSite::AddRef +// +// Purpose: +// +// Increments the reference count of the CSimpleSite. Since +// COleInPlaceSite is a nested class of CSimpleSite, we don't need an +// extra reference count for COleInPlaceSite. We can safely use the +// reference count of CSimpleSite. +// +// Parameters: +// +// None +// +// Return Value: +// +// ULONG - The new reference count of CSimpleSite +// +// Function Calls: +// Function Location +// +// TestDebugOut Windows API +// CSimpleSite::QueryInterface SITE.CPP +// +// +//******************************************************************** + +STDMETHODIMP_(ULONG) COleInPlaceSite::AddRef() +{ + TestDebugOut(TEXT("In IOIPS::AddRef\r\n")); + + // delegate to the container Site + return m_pSite->AddRef(); +} + +//********************************************************************** +// +// COleInPlaceSite::Release +// +// Purpose: +// +// Decrements the reference count of the CSimpleSite. Since +// COleInPlaceSite is a nested class of CSimpleSite, we don't need an +// extra reference count for COleInPlaceSite. We can safely use the +// reference count of CSimpleSite. +// +// Parameters: +// +// None +// +// Return Value: +// +// ULONG - The new reference count of CSimpleSite +// +// Function Calls: +// Function Location +// +// TestDebugOut Windows API +// CSimpleSite::Release SITE.CPP +// +// +//******************************************************************** + +STDMETHODIMP_(ULONG) COleInPlaceSite::Release() +{ + TestDebugOut(TEXT("In IOIPS::Release\r\n")); + + // delegate to the container Site + return m_pSite->Release(); +} + +//********************************************************************** +// +// COleInPlaceSite::GetWindow +// +// Purpose: +// +// Returns the Window Handle of the client site +// +// Parameters: +// +// HWND FAR* lphwnd - place to return the handle +// +// Return Value: +// +// S_OK +// +// Function Calls: +// Function Location +// +// TestDebugOut Windows API +// ResultFromScode OLE API +// +// +//******************************************************************** + +STDMETHODIMP COleInPlaceSite::GetWindow (HWND FAR* lphwnd) +{ + TestDebugOut(TEXT("In IOIPS::GetWindow\r\n")); + + // return the handle to our editing window. + *lphwnd = m_pSite->m_lpDoc->m_hDocWnd; + + return ResultFromScode(S_OK); +} + +//********************************************************************** +// +// COleInPlaceSite::ContextSensitiveHelp +// +// Purpose: +// set/reset context sensitive help mode +// +// Parameters: +// +// BOOL fEnterMode - TRUE for entering Context Sensitive help mode +// +// Return Value: +// +// S_OK +// +// Function Calls: +// Function Location +// +// TestDebugOut Windows API +// ResultFromScode OLE API +// +// Comments: +// +// Be sure to read the technotes included with the OLE toolkit. +// +//******************************************************************** + +STDMETHODIMP COleInPlaceSite::ContextSensitiveHelp (BOOL fEnterMode) +{ + TestDebugOut(TEXT("In IOIPS::ContextSensitiveHelp\r\n")); + + if (m_pSite->m_lpDoc->m_lpApp->m_fCSHMode != fEnterMode) + m_pSite->m_lpDoc->m_lpApp->m_fCSHMode = fEnterMode; + + return ResultFromScode(S_OK); +} + +//********************************************************************** +// +// COleInPlaceSite::CanInPlaceActivate +// +// Purpose: +// +// Object calls to find out if the container can InPlace activate +// +// Parameters: +// +// None +// +// Return Value: +// +// S_OK +// +// Function Calls: +// Function Location +// +// TestDebugOut Windows API +// ResultFromScode OLE API +// +// +//******************************************************************** + +STDMETHODIMP COleInPlaceSite::CanInPlaceActivate () +{ + TestDebugOut(TEXT("In IOIPS::CanInPlaceActivate\r\n")); + + // return S_OK to indicate we can in-place activate + return ResultFromScode(S_OK); +} + +//********************************************************************** +// +// COleInPlaceSite::OnInPlaceActivate +// +// Purpose: +// +// Called by the object on InPlace Activation +// +// Parameters: +// +// None +// +// Return Value: +// +// S_OK - if the interface can be found +// E_FAIL - otherwise +// +// Function Calls: +// Function Location +// +// TestDebugOut Windows API +// ResultFromScode OLE API +// IOleObject::QueryInterface Object +// +// +//******************************************************************** + +STDMETHODIMP COleInPlaceSite::OnInPlaceActivate () +{ + HRESULT hrErr; + TestDebugOut(TEXT("In IOIPS::OnInPlaceActivate\r\n")); + + hrErr = m_pSite->m_lpOleObject->QueryInterface( + IID_IOleInPlaceObject, (LPVOID FAR *)&m_pSite->m_lpInPlaceObject); + if (hrErr != NOERROR) + return ResultFromScode(E_FAIL); + + // return S_OK to indicate we can in-place activate. + return ResultFromScode(S_OK); +} + +//********************************************************************** +// +// COleInPlaceSite::OnUIActivate +// +// Purpose: +// +// Object calls this method when it displays it's UI. +// +// Parameters: +// +// None. +// +// Return Value: +// +// S_OK +// +// Function Calls: +// Function Location +// +// TestDebugOut Windows API +// ResultFromScode OLE API +// IOleInPlaceObject::GetWindow Object +// +// +//******************************************************************** + +STDMETHODIMP COleInPlaceSite::OnUIActivate () +{ + TestDebugOut(TEXT("In IOIPS::OnUIActivate\r\n")); + + m_pSite->m_lpDoc->m_fAddMyUI=FALSE; + m_pSite->m_lpDoc->m_fInPlaceActive = TRUE; + m_pSite->m_fInPlaceActive = TRUE; + + m_pSite->m_lpInPlaceObject->GetWindow((HWND FAR*)&m_pSite->m_hwndIPObj); + + // return S_OK to continue in-place activation + return ResultFromScode(S_OK); +} + +//********************************************************************** +// +// COleInPlaceSite::GetWindowContext +// +// Purpose: +// +// Called by the object to get information for InPlace Negotiation. +// +// Parameters: +// +// LPOLEINPLACEFRAME FAR* lplpFrame - Location to return a pointer +// to IOleInPlaceFrame. +// +// LPOLEINPLACEUIWINDOW FAR* lplpDoc - Location to return a pointer +// to IOleInPlaceUIWindow. +// +// LPRECT lprcPosRect - The rect that the object +// occupies +// +// LPRECT lprcClipRect - The clipping rect +// +// LPOLEINPLACEFRAMEINFO lpFrameInfo - Pointer to FRAMEINFO +// +// +// Return Value: +// +// S_OK +// +// Function Calls: +// Function Location +// +// COleInPlaceFrame::AddRef IOIPF.CPP +// CSimpleSite::GetObjRect SITE.CPP +// TestDebugOut Windows API +// CopyRect Windows API +// GetClientRect Windows API +// ResultFromScode OLE API +// +// +//******************************************************************** + +STDMETHODIMP COleInPlaceSite::GetWindowContext ( + LPOLEINPLACEFRAME FAR* lplpFrame, + LPOLEINPLACEUIWINDOW FAR* lplpDoc, + LPRECT lprcPosRect, + LPRECT lprcClipRect, + LPOLEINPLACEFRAMEINFO lpFrameInfo) +{ + RECT rect; + + TestDebugOut(TEXT("In IOIPS::GetWindowContext\r\n")); + + // the frame is associated with the application object. + // need to AddRef() it... + m_pSite->m_lpDoc->m_lpApp->m_OleInPlaceFrame.AddRef(); + *lplpFrame = &m_pSite->m_lpDoc->m_lpApp->m_OleInPlaceFrame; + *lplpDoc = NULL; // must be NULL, cause we're SDI. + + // get the size of the object in pixels + m_pSite->GetObjRect(&rect); + + // Copy this to the passed buffer + CopyRect(lprcPosRect, &rect); + + // fill the clipping region + GetClientRect(m_pSite->m_lpDoc->m_hDocWnd, &rect); + CopyRect(lprcClipRect, &rect); + + // fill the FRAMEINFO + if (sizeof(OLEINPLACEFRAMEINFO) != lpFrameInfo->cb) + { + TestDebugOut(TEXT("WARNING IOIPS::GetWindowContext " + "lpFrameInfo->cb size may be incorrect\r\n")); + } + + lpFrameInfo->fMDIApp = FALSE; + lpFrameInfo->hwndFrame = m_pSite->m_lpDoc->m_lpApp->m_hAppWnd; + lpFrameInfo->haccel = m_pSite->m_lpDoc->m_lpApp->m_hAccel; + lpFrameInfo->cAccelEntries = SIMPCNTR_ACCEL_CNT; + + return ResultFromScode(S_OK); +} + +//********************************************************************** +// +// COleInPlaceSite::Scroll +// +// Purpose: +// +// Not Implemented +// +// Parameters: +// +// SIZE scrollExtent - number of pixels scrolled in X and Y direction +// +// Return Value: +// +// E_FAIL +// +// Function Calls: +// Function Location +// +// TestDebugOut Windows API +// +// +//******************************************************************** + +STDMETHODIMP COleInPlaceSite::Scroll (SIZE scrollExtent) +{ + TestDebugOut(TEXT("In IOIPS::Scroll\r\n")); + return ResultFromScode(E_FAIL); +} + +//********************************************************************** +// +// COleInPlaceSite::OnUIDeactivate +// +// Purpose: +// +// Called by the object when its UI goes away +// +// Parameters: +// +// BOOL fUndoable +// +// Return Value: +// +// S_OK +// +// Function Calls: +// Function Location +// +// TestDebugOut Windows API +// CSimpleAPP::QueryNewPalette APP.CPP +// CSimpleAPP::AddFrameLevelUI APP.CPP +// ResultFromScode OLE API +// +// +//******************************************************************** + +STDMETHODIMP COleInPlaceSite::OnUIDeactivate (BOOL fUndoable) +{ + TestDebugOut(TEXT("In IOIPS::OnUIDeactivate\r\n")); + + // need to clear this flag first + m_pSite->m_lpDoc->m_fInPlaceActive = FALSE; + m_pSite->m_fInPlaceActive = FALSE; + + m_pSite->m_lpDoc->m_lpApp->QueryNewPalette(); + m_pSite->m_lpDoc->m_lpApp->AddFrameLevelUI(); + return ResultFromScode(S_OK); +} + +//********************************************************************** +// +// COleInPlaceSite::OnInPlaceDeactivate +// +// Purpose: +// +// Called when the inplace session is over +// +// Parameters: +// +// None +// +// Return Value: +// +// S_OK +// +// Function Calls: +// Function Location +// +// TestDebugOut Windows API +// ResultFromScode OLE API +// IOleInPlaceObject::Release Object +// +// +//******************************************************************** + +STDMETHODIMP COleInPlaceSite::OnInPlaceDeactivate () +{ + TestDebugOut(TEXT("In IOIPS::OnInPlaceDeactivate\r\n")); + + if (m_pSite->m_lpInPlaceObject) + { + m_pSite->m_lpInPlaceObject->Release(); + m_pSite->m_lpInPlaceObject = NULL; + } + return ResultFromScode(S_OK); +} + +//********************************************************************** +// +// COleInPlaceSite::DiscardUndoState +// +// Purpose: +// +// Not Implemented +// +// Parameters: +// +// None +// +// Return Value: +// +// E_FAIL +// +// Function Calls: +// Function Location +// +// TestDebugOut Windows API +// +// +//******************************************************************** + +STDMETHODIMP COleInPlaceSite::DiscardUndoState () +{ + TestDebugOut(TEXT("In IOIPS::DiscardUndoState\r\n")); + return ResultFromScode(E_FAIL); +} + +//********************************************************************** +// +// COleInPlaceSite::DeactivateAndUndo +// +// Purpose: +// +// Not Implemented +// +// Parameters: +// +// None +// +// Return Value: +// +// E_FAIL +// +// Function Calls: +// Function Location +// +// TestDebugOut Windows API +// +// +//******************************************************************** + +STDMETHODIMP COleInPlaceSite::DeactivateAndUndo () +{ + TestDebugOut(TEXT("In IOIPS::DeactivateAndUndo\r\n")); + return ResultFromScode(E_FAIL); +} + +//********************************************************************** +// +// COleInPlaceSite::OnPosRectChange +// +// Purpose: +// +// The object calls this method when it's size changes during an +// InPlace Session +// +// Parameters: +// +// LPCRECT lprcPosRect - The new object rect +// +// Return Value: +// +// S_OK +// +// Function Calls: +// Function Location +// +// TestDebugOut Windows API +// GetClientRect Windows API +// IOleObject::GetExtent Object +// IOleInPlaceObject::SetObjectRects Object +// ResultFromScode OLE API +// +// +//******************************************************************** + +STDMETHODIMP COleInPlaceSite::OnPosRectChange (LPCRECT lprcPosRect) +{ + TestDebugOut(TEXT("In IOIPS::OnPosRectChange\r\n")); + + // update the size in the document object + // NOTE: here we must call IOleObject::GetExtent to get actual extents + // of the running object. IViewObject2::GetExtent returns the + // last cached extents. + m_pSite->m_lpOleObject->GetExtent(DVASPECT_CONTENT, &m_pSite->m_sizel); + RECT rect; + GetClientRect(m_pSite->m_lpDoc->m_hDocWnd, &rect); + + // tell the object its new size + m_pSite->m_lpInPlaceObject->SetObjectRects(lprcPosRect, &rect); + + return ResultFromScode(S_OK); +} + |