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/ioipf.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/ioipf.cpp')
-rw-r--r-- | private/oleutest/simpcntr/ioipf.cpp | 641 |
1 files changed, 641 insertions, 0 deletions
diff --git a/private/oleutest/simpcntr/ioipf.cpp b/private/oleutest/simpcntr/ioipf.cpp new file mode 100644 index 000000000..ca4a0d9af --- /dev/null +++ b/private/oleutest/simpcntr/ioipf.cpp @@ -0,0 +1,641 @@ +//********************************************************************** +// File name: IOIPF.CPP +// +// Implementation file for COleInPlaceFrame +// +// Functions: +// +// See IOIPF.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" + + +//********************************************************************** +// +// COleInPlaceFrame::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. +// E_NOINTERFACE - The interface is not supported +// +// Function Calls: +// Function Location +// +// TestDebugOut Windows API +// CSimpleApp::QueryInterface APP.CPP +// +// +//******************************************************************** + +STDMETHODIMP COleInPlaceFrame::QueryInterface(REFIID riid, LPVOID FAR* ppvObj) +{ + TestDebugOut(TEXT("In IOIPF::QueryInterface\r\n")); + + // delegate to the application Object + return m_pApp->QueryInterface(riid, ppvObj); +} + +//********************************************************************** +// +// COleInPlaceFrame::AddRef +// +// Purpose: +// +// Increments the reference count of the CSimpleApp. Since +// COleInPlaceFrame is a nested class of CSimpleApp, we don't need an +// extra reference count for COleInPlaceFrame. We can safely use the +// reference count of CSimpleApp. +// +// Parameters: +// +// None +// +// Return Value: +// +// ULONG - The new reference count of the CSimpleApp +// +// Function Calls: +// Function Location +// +// TestDebugOut Windows API +// CSimpleApp::AddRef APP.CPP +// +// +//******************************************************************** + +STDMETHODIMP_(ULONG) COleInPlaceFrame::AddRef() +{ + TestDebugOut(TEXT("In IOIPF::AddRef\r\n")); + + // delegate to the application Object + return m_pApp->AddRef(); +} + +//********************************************************************** +// +// COleInPlaceFrame::Release +// +// Purpose: +// +// Decrements the reference count of the CSimpleApp. Since +// COleInPlaceFrame is a nested class of CSimpleApp, we don't need an +// extra reference count for COleInPlaceFrame. We can safely use the +// reference count of CSimpleApp. +// +// Parameters: +// +// None +// +// Return Value: +// +// ULONG - The new reference count of CSimpleApp. +// +// Function Calls: +// Function Location +// +// TestDebugOut Windows API +// CSimpleApp::Release APP.CPP +// +// +//******************************************************************** + +STDMETHODIMP_(ULONG) COleInPlaceFrame::Release() +{ + TestDebugOut(TEXT("In IOIPF::Release\r\n")); + + // delegate to the document object + return m_pApp->Release(); + +} + +//********************************************************************** +// +// COleInPlaceFrame::GetWindow +// +// Purpose: +// +// Returns the frame window handle +// +// Parameters: +// +// HWND FAR* lphwnd - Location to return the window handle +// +// Return Value: +// +// S_OK +// +// Function Calls: +// Function Location +// +// TestDebugOut Windows API +// ResultFromScode OLE API +// +// +//******************************************************************** + +STDMETHODIMP COleInPlaceFrame::GetWindow (HWND FAR* lphwnd) +{ + TestDebugOut(TEXT("In IOIPF::GetWindow\r\n")); + *lphwnd = m_pApp->m_hAppWnd; + return ResultFromScode(S_OK); +} + +//********************************************************************** +// +// COleInPlaceFrame::ContextSensitiveHelp +// +// Purpose: +// +// Used in implementing Context sensitive help +// +// Parameters: +// +// BOOL fEnterMode - TRUE if starting 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 in the OLE toolkit. +// +//******************************************************************** + +STDMETHODIMP COleInPlaceFrame::ContextSensitiveHelp (BOOL fEnterMode) +{ + TestDebugOut(TEXT("In IOIPF::ContextSensitiveHelp\r\n")); + + m_pApp->m_fMenuMode = fEnterMode; + + return ResultFromScode(S_OK); +} +//********************************************************************** +// +// COleInPlaceFrame::GetBorder +// +// Purpose: +// +// Returns the outermost border that frame adornments can be attached +// during InPlace Activation. +// +// Parameters: +// +// LPRECT lprectBorder - return parameter to contain the outermost +// rect for frame adornments +// +// Return Value: +// +// S_OK +// +// Function Calls: +// Function Location +// +// TestDebugOut Windows API +// GetClientRect Windows API +// CopyRect Windows API +// ResultFromScode OLE API +// +// +//******************************************************************** + +STDMETHODIMP COleInPlaceFrame::GetBorder (LPRECT lprectBorder) +{ + RECT rect; + + TestDebugOut(TEXT("In IOIPF::GetBorder\r\n")); + + // get the rect for the entire frame. + GetClientRect(m_pApp->m_hAppWnd, &rect); + + CopyRect(lprectBorder, &rect); + + return ResultFromScode(S_OK); +} + +//********************************************************************** +// +// COleInPlaceFrame::RequestBorderSpace +// +// Purpose: +// +// Approves/Denies requests for border space during InPlace +// negotiation. +// +// Parameters: +// +// LPCBORDERWIDTHS lpborderwidths - The width in pixels needed on +// each side of the frame. +// +// Return Value: +// +// S_OK +// +// Function Calls: +// Function Location +// +// TestDebugOut Windows API +// ResultFromScode OLE API +// +// Comments: +// +// This implementation doesn't care about how much border space +// is used. It always returns S_OK. +// +//******************************************************************** + +STDMETHODIMP COleInPlaceFrame::RequestBorderSpace (LPCBORDERWIDTHS + lpborderwidths) +{ + TestDebugOut(TEXT("In IOIPF::RequestBorderSpace\r\n")); + + // always approve the request + return ResultFromScode(S_OK); +} + +//********************************************************************** +// +// COleInPlaceFrame::SetBorderSpace +// +// Purpose: +// +// The object calls this method when it is actually going to +// start using the border space. +// +// Parameters: +// +// LPCBORDERWIDTHS lpborderwidths - Border space actually being used +// by the object +// +// Return Value: +// +// S_OK +// +// Function Calls: +// Function Location +// +// CSimpleApp::AddFrameLevelTools APP.CPP +// TestDebugOut Windows API +// GetClientRect Windows API +// MoveWindow Windows API +// ResultFromScode Windows API +// +// Comments: +// +// This routine could be a little smarter and check to see if +// the object is requesting the entire client area of the +// window. +// +//******************************************************************** + +STDMETHODIMP COleInPlaceFrame::SetBorderSpace (LPCBORDERWIDTHS lpborderwidths) +{ + + TestDebugOut(TEXT("In IOIPF::SetBorderSpace\r\n")); + + if (lpborderwidths == NULL) + m_pApp->AddFrameLevelTools(); + else + { + RECT rect; + + GetClientRect(m_pApp->m_hAppWnd, &rect); + + MoveWindow( m_pApp->m_lpDoc->m_hDocWnd, + rect.left + lpborderwidths->left, + rect.top + lpborderwidths->top, + rect.right - lpborderwidths->right - lpborderwidths->left, + rect.bottom - lpborderwidths->bottom - lpborderwidths->top, + TRUE); + } + return ResultFromScode(S_OK); +} + +//********************************************************************** +// +// COleInPlaceFrame::SetActiveObject +// +// Purpose: +// install the object being activated in-place +// +// +// Parameters: +// +// LPOLEINPLACEACTIVEOBJECT lpActiveObject - Pointer to the +// objects +// IOleInPlaceActiveObject +// interface +// +// LPCOLESTR lpszObjName - Name of the object +// +// Return Value: +// +// S_OK +// +// Function Calls: +// Function Location +// +// TestDebugOut Windows API +// IOleInPlaceActiveObject::AddRef Object +// IOleInPlaceActiveObject::Release Object +// ResultFromScode OLE API +// +// +//******************************************************************** + +STDMETHODIMP COleInPlaceFrame::SetActiveObject (LPOLEINPLACEACTIVEOBJECT + lpActiveObject, LPCOLESTR lpszObjName) +{ + + TestDebugOut(TEXT("In IOIPF::SetActiveObject\r\n")); + + // AddRef() it and save it... + if (lpActiveObject) + { + lpActiveObject->AddRef(); + + lpActiveObject->GetWindow(&m_pApp->m_hwndUIActiveObj); + if (m_pApp->m_hwndUIActiveObj) + SendMessage(m_pApp->m_hwndUIActiveObj, WM_QUERYNEWPALETTE, 0, 0L); + } + else + { + if (m_pApp->m_lpDoc->m_lpActiveObject) + m_pApp->m_lpDoc->m_lpActiveObject->Release(); + m_pApp->m_hwndUIActiveObj = NULL; + } + + // in an MDI app, this method really shouldn't be called, + // this method associated with the doc is called instead. + + m_pApp->m_lpDoc->m_lpActiveObject = lpActiveObject; + // should set window title here + + return ResultFromScode(S_OK); +} + +//********************************************************************** +// +// COleInPlaceFrame::InsertMenus +// +// Purpose: +// +// Inserts the container menu into the combined menu +// +// Parameters: +// +// HMENU hmenuShared - Menu Handle to be set. +// LPOLEMENUGROUPWIDTHS lpMenuWidths - Width of menus +// +// Return Value: +// S_OK +// +// Function Calls: +// Function Location +// +// TestDebugOut Windows API +// AppendMenu Windows API +// ResultFromScode OLE API +// +// +//******************************************************************** + +STDMETHODIMP COleInPlaceFrame::InsertMenus (HMENU hmenuShared, + LPOLEMENUGROUPWIDTHS lpMenuWidths) +{ + TestDebugOut(TEXT("In IOIPF::InsertMenus\r\n")); + + AppendMenu(hmenuShared, MF_BYPOSITION | MF_POPUP, + (UINT) m_pApp->m_lpDoc->m_hFileMenu, TEXT("&File")); + AppendMenu(hmenuShared, MF_BYPOSITION | MF_POPUP, + (UINT) m_pApp->m_lpDoc->m_hHelpMenu, TEXT("&Other")); + + lpMenuWidths->width[0] = 1; + lpMenuWidths->width[2] = 0; + lpMenuWidths->width[4] = 1; + + return ResultFromScode(S_OK); +} + + +//********************************************************************** +// +// COleInPlaceFrame::SetMenu +// +// Purpose: +// +// Sets the application menu to the combined menu +// +// Parameters: +// +// HMENU hmenuShared - The combined menu +// +// HOLEMENU holemenu - Used by OLE +// +// HWND hwndActiveObject - Used by OLE +// +// Return Value: +// +// S_OK - if menu was correctly installed +// E_FAIL - otherwise +// +// Function Calls: +// Function Location +// +// TestDebugOut Windows API +// SetMenu Windows API +// OleSetMenuDescriptor OLE API +// +// +//******************************************************************** + +STDMETHODIMP COleInPlaceFrame::SetMenu (HMENU hmenuShared, HOLEMENU holemenu, + HWND hwndActiveObject) +{ + + TestDebugOut(TEXT("In IOIPF::SetMenu\r\n")); + + HMENU hMenu = m_pApp->m_lpDoc->m_hMainMenu; + + if (holemenu) + hMenu = hmenuShared; + + // call the windows api, not this method + ::SetMenu (m_pApp->m_hAppWnd, hMenu); + + HRESULT hRes = OleSetMenuDescriptor(holemenu, m_pApp->m_hAppWnd, + hwndActiveObject, this, + m_pApp->m_lpDoc->m_lpActiveObject); + + return hRes; +} + + +//********************************************************************** +// +// COleInPlaceFrame::RemoveMenus +// +// Purpose: +// +// Removes the container menus from the combined menu +// +// Parameters: +// +// HMENU hmenuShared - Handle to the combined menu. +// +// Return Value: +// +// S_OK +// +// Function Calls: +// Function Location +// +// TestDebugOut Windows API +// GetMenuItemCount Windows API +// RemoveMenu Windows API +// ResultFromScode OLE API +// +// +//******************************************************************** + +STDMETHODIMP COleInPlaceFrame::RemoveMenus (HMENU hmenuShared) +{ + int retval; + + TestDebugOut(TEXT("In IOIPF::RemoveMenus\r\n")); + + while ((retval = GetMenuItemCount(hmenuShared)) && (retval != -1)) + RemoveMenu(hmenuShared, 0, MF_BYPOSITION); + + return ResultFromScode(S_OK); +} + +//********************************************************************** +// +// COleInPlaceFrame::SetStatusText +// +// Purpose: +// +// Not Implemented +// +// Parameters: +// +// LPCOLESTR lpszStatusText - character string containing the message +// +// Return Value: +// +// E_FAIL +// +// Function Calls: +// Function Location +// +// TestDebugOut Windows API +// +// Comments: +// +// This function is not implemented due to the fact +// that this application does not have a status bar. +// +//******************************************************************** + +STDMETHODIMP COleInPlaceFrame::SetStatusText (LPCOLESTR lpszStatusText) +{ + TestDebugOut(TEXT("In IOIPF::SetStatusText\r\n")); + return ResultFromScode(E_FAIL); +} + +//********************************************************************** +// +// COleInPlaceFrame::EnableModeless +// +// Purpose: +// +// Enables/Disables container modeless dialogs +// +// Parameters: +// +// BOOL fEnable - Enable/Disable +// +// Return Value: +// +// S_OK +// +// Function Calls: +// Function Location +// +// TestDebugOut Windows API +// +// Comments: +// +// There are no modeless dialogs in this application, so the +// implementation of this method is trivial. +// +//******************************************************************** + +STDMETHODIMP COleInPlaceFrame::EnableModeless (BOOL fEnable) +{ + TestDebugOut(TEXT("In IOIPF::EnableModeless\r\n")); + return ResultFromScode(S_OK); +} + +//********************************************************************** +// +// COleInPlaceFrame::TranslateAccelerator +// +// Purpose: +// +// Not Implemented +// +// Parameters: +// +// LPMSG lpmsg - structure containing keystroke message +// WORD wID - identifier value corresponding to the keystroke +// +// Return Value: +// +// S_FALSE +// +// Function Calls: +// Function Location +// +// TestDebugOut Windows API +// +// +//******************************************************************** + +STDMETHODIMP COleInPlaceFrame::TranslateAccelerator (LPMSG lpmsg, WORD wID) +{ + TestDebugOut(TEXT("In IOIPF::TranslateAccelerator\r\n")); + return ::TranslateAccelerator(m_pApp->m_hAppWnd, m_pApp->m_hAccel, lpmsg) + ? ResultFromScode(S_OK) + : ResultFromScode(S_FALSE); +} |