diff options
Diffstat (limited to 'iup/srcole/tOleInPlaceFrame.cpp')
-rwxr-xr-x | iup/srcole/tOleInPlaceFrame.cpp | 429 |
1 files changed, 429 insertions, 0 deletions
diff --git a/iup/srcole/tOleInPlaceFrame.cpp b/iup/srcole/tOleInPlaceFrame.cpp new file mode 100755 index 0000000..15fc9b4 --- /dev/null +++ b/iup/srcole/tOleInPlaceFrame.cpp @@ -0,0 +1,429 @@ +// tOleInPlaceFrame.cpp: implementation of the tOleInPlaceFrame class. +// +////////////////////////////////////////////////////////////////////// + +#include "tOleInPlaceFrame.h" + +////////////////////////////////////////////////////////////////////// +// Construction/Destruction +////////////////////////////////////////////////////////////////////// + +/* + * tOleInPlaceFrame::tOleInPlaceFrame + * tOleInPlaceFrame::~tOleInPlaceFrame + * + * Constructor Parameters: + * hInst HINSTANCE from WinMain + * hInstPrev HINSTANCE from WinMain + * pszCmdLine LPSTR from WinMain + * nCmdShow int from WInMain + */ + +tOleInPlaceFrame::tOleInPlaceFrame(HWND hwnd) + { + m_cRef=0; + m_hAccelIP=NULL; + m_fInContextHelp=FALSE; + m_pIOleIPActiveObject=NULL; + m_hWnd = hwnd; + + return; + } + + +tOleInPlaceFrame::~tOleInPlaceFrame(void) + { + } + + +/* + * tOleInPlaceFrame::QueryInterface + * tOleInPlaceFrame::AddRef + * tOleInPlaceFrame::Release + */ + +STDMETHODIMP tOleInPlaceFrame::QueryInterface(REFIID riid, PPVOID ppv) + { + //We only know IUnknown and IOleInPlaceFrame + *ppv=NULL; + + if (IID_IUnknown==riid || IID_IOleInPlaceUIWindow==riid + || IID_IOleWindow==riid || IID_IOleInPlaceFrame==riid) + *ppv=(LPOLEINPLACEFRAME)this; + + if (NULL!=*ppv) + { + ((LPUNKNOWN)*ppv)->AddRef(); + return NOERROR; + } + + return ResultFromScode(E_NOINTERFACE); + } + + +STDMETHODIMP_(ULONG) tOleInPlaceFrame::AddRef(void) + { + return ++m_cRef; + } + +STDMETHODIMP_(ULONG) tOleInPlaceFrame::Release(void) + { + /* + * We don't do anything with this since we're not controlled + * by a reference count as far as in-place stuff is concerned. + */ + return --m_cRef; + } + + + + +/* + * tOleInPlaceFrame::GetWindow + * + * Purpose: + * Retrieves the handle of the window associated with the object + * on which this interface is implemented. + * + * Parameters: + * phWnd HWND * in which to store the window handle. + * + * Return Value: + * HRESULT NOERROR if successful, E_FAIL if there is no + * window. + */ + +STDMETHODIMP tOleInPlaceFrame::GetWindow(HWND *phWnd) + { + *phWnd=m_hWnd; + return NOERROR; + } + + + + +/* + * tOleInPlaceFrame::ContextSensitiveHelp + * + * Purpose: + * Instructs the object on which this interface is implemented to + * enter or leave a context-sensitive help mode. + * + * Parameters: + * fEnterMode BOOL TRUE to enter the mode, FALSE otherwise. + * + * Return Value: + * HRESULT NOERROR + */ + +STDMETHODIMP tOleInPlaceFrame::ContextSensitiveHelp(BOOL fEnterMode) + { + /* + * Don't bother if there is no active object since we don't do + * context help on our own. + */ + if (NULL==m_pIOleIPActiveObject) + return NOERROR; + + /* + * If the state changes, an MDI frame should call the same + * function in all documents. An SDI frame should just call + * the active object, if it has one. + */ + + if (m_fInContextHelp!=fEnterMode) + { + m_fInContextHelp=fEnterMode; + + m_pIOleIPActiveObject->ContextSensitiveHelp(fEnterMode); + + } + + return NOERROR; + } + + + + +/* + * tOleInPlaceFrame::GetBorder + * + * Purpose: + * Returns the rectangle in which the container is willing to + * negotiate about an object's adornments. + * + * Parameters: + * prcBorder LPRECT in which to store the rectangle. + * + * Return Value: + * HRESULT NOERROR if all is well, INPLACE_E_NOTOOLSPACE + * if there is no negotiable space. + */ + +STDMETHODIMP tOleInPlaceFrame::GetBorder(LPRECT prcBorder) + { + if (NULL==prcBorder) + return ResultFromScode(E_INVALIDARG); + + /* + * We return all the client area space sans the StatStrip, + * which we control + */ + GetClientRect(m_hWnd, prcBorder); + + return NOERROR; + } + + + + +/* + * tOleInPlaceFrame::RequestBorderSpace + * + * Purpose: + * Asks the container if it can surrender the amount of space + * in pBW that the object would like for it's adornments. The + * container does nothing but validate the spaces on this call. + * + * Parameters: + * pBW LPCBORDERWIDTHS containing the requested space. + * The values are the amount of space requested + * from each side of the relevant window. + * + * Return Value: + * HRESULT NOERROR if we can give up space, + * INPLACE_E_NOTOOLSPACE otherwise. + */ + +STDMETHODIMP tOleInPlaceFrame::RequestBorderSpace(LPCBORDERWIDTHS pBW) + { + //Everything is fine with us, so always return an OK. + return NOERROR; + } + + + + +/* + * tOleInPlaceFrame::SetBorderSpace + * + * Purpose: + * Called when the object now officially requests that the + * container surrender border space it previously allowed + * in RequestBorderSpace. The container should resize windows + * appropriately to surrender this space. + * + * Parameters: + * pBW LPCBORDERWIDTHS containing the amount of space + * from each side of the relevant window that the + * object is now reserving. + * + * Return Value: + * HRESULT NOERROR + */ + +STDMETHODIMP tOleInPlaceFrame::SetBorderSpace(LPCBORDERWIDTHS pBW) + { + return NOERROR; + } + + + + +/* + * tOleInPlaceFrame::SetActiveObject + * + * Purpose: + * Provides the container with the object's IOleInPlaceActiveObject + * pointer + * + * Parameters: + * pIIPActiveObj LPOLEINPLACEACTIVEOBJECT of interest. + * pszObj LPCOLESTR naming the object. Not used. + * + * Return Value: + * HRESULT NOERROR + */ + +STDMETHODIMP tOleInPlaceFrame::SetActiveObject + (LPOLEINPLACEACTIVEOBJECT pIIPActiveObj, LPCOLESTR pszObj) + { + if (NULL!=m_pIOleIPActiveObject) + m_pIOleIPActiveObject->Release(); + + //NULLs m_pIOleIPActiveObject if pIIPActiveObj is NULL + m_pIOleIPActiveObject=pIIPActiveObj; + + if (NULL!=m_pIOleIPActiveObject) + m_pIOleIPActiveObject->AddRef(); + + return NOERROR; + } + + + + +/* + * tOleInPlaceFrame::InsertMenus + * + * Purpose: + * Instructs the container to place its in-place menu items where + * necessary in the given menu and to fill in elements 0, 2, and 4 + * of the OLEMENUGROUPWIDTHS array to indicate how many top-level + * items are in each group. + * + * Parameters: + * hMenu HMENU in which to add popups. + * pMGW LPOLEMENUGROUPWIDTHS in which to store the + * width of each container menu group. + * + * Return Value: + * HRESULT NOERROR + */ + +STDMETHODIMP tOleInPlaceFrame::InsertMenus(HMENU hMenu + , LPOLEMENUGROUPWIDTHS pMGW) + { + return NOERROR; + } + + + + +/* + * tOleInPlaceFrame::SetMenu + * + * Purpose: + * Instructs the container to replace whatever menu it's currently + * using with the given menu and to call OleSetMenuDescritor so OLE + * knows to whom to dispatch messages. + * + * Parameters: + * hMenu HMENU to show. + * hOLEMenu HOLEMENU to the menu descriptor. + * hWndObj HWND of the active object to which messages are + * dispatched. + * Return Value: + * HRESULT NOERROR + */ + +STDMETHODIMP tOleInPlaceFrame::SetMenu(HMENU hMenu + , HOLEMENU hOLEMenu, HWND hWndObj) + { + HRESULT hr; + + /* + * Our responsibilities here are to put the menu on the frame + * window and call OleSetMenuDescriptor. + * CPatronClient::SetMenu which we call here takes care of + * MDI/SDI differences. + * + * We also want to save the object's hWnd for use in WM_SETFOCUS + * processing. + */ + + return NOERROR; + } + + + + +/* + * tOleInPlaceFrame::RemoveMenus + * + * Purpose: + * Asks the container to remove any menus it put into hMenu in + * InsertMenus. + * + * Parameters: + * hMenu HMENU from which to remove the container's + * items. + * + * Return Value: + * HRESULT NOERROR + */ + +STDMETHODIMP tOleInPlaceFrame::RemoveMenus(HMENU hMenu) + { + return NOERROR; + } + + + + +/* + * tOleInPlaceFrame::SetStatusText + * + * Purpose: + * Asks the container to place some text in a status line, if one + * exists. If the container does not have a status line it + * should return E_FAIL here in which case the object could + * display its own. + * + * Parameters: + * pszText LPCOLESTR to display. + * + * Return Value: + * HRESULT NOERROR if successful, S_TRUNCATED if not all + * of the text could be displayed, or E_FAIL if + * the container has no status line. + */ + +STDMETHODIMP tOleInPlaceFrame::SetStatusText(LPCOLESTR pszText) + { + return NOERROR; + } + + + + +/* + * tOleInPlaceFrame::EnableModeless + * + * Purpose: + * Instructs the container to show or hide any modeless popup + * windows that it may be using. + * + * Parameters: + * fEnable BOOL indicating to enable/show the windows + * (TRUE) or to hide them (FALSE). + * + * Return Value: + * HRESULT NOERROR + */ + +STDMETHODIMP tOleInPlaceFrame::EnableModeless(BOOL fEnable) + { + return NOERROR; + } + + + + +/* + * tOleInPlaceFrame::TranslateAccelerator + * + * Purpose: + * When dealing with an in-place object from an EXE server, this + * is called to give the container a chance to process accelerators + * after the server has looked at the message. + * + * Parameters: + * pMSG LPMSG for the container to examine. + * wID WORD the identifier in the container's + * accelerator table (from IOleInPlaceSite + * ::GetWindowContext) for this message (OLE does + * some translation before calling). + * + * Return Value: + * HRESULT NOERROR if the keystroke was used, + * S_FALSE otherwise. + */ + +STDMETHODIMP tOleInPlaceFrame::TranslateAccelerator(LPMSG pMSG, WORD wID) + { + SCODE sc; + + sc=S_OK; + return ResultFromScode(sc); + } |