1 /* 2 Copyright (c) 2009 NetAllied Systems GmbH 3 4 This file is part of G3DWarehouseBrowser. 5 6 Licensed under the MIT Open Source License, 7 for details please see LICENSE file or the website 8 http://www.opensource.org/licenses/mit-license.php 9 */ 10 11 #ifndef __G3D_OLE_IN_PLACE_SITE_H__ 12 #define __G3D_OLE_IN_PLACE_SITE_H__ 13 14 #include "G3DPrerequisites.h" 15 #include "G3DOleClientSite.h" 16 #include "G3DOleInPlaceFrame.h" 17 18 #include <windows.h> 19 20 namespace G3D 21 { 22 class OleInPlaceSite : public IOleInPlaceSite { 23 private: 24 OleClientSite* mClientSite; 25 OleInPlaceFrame* mInPlaceFrame; 26 IOleObject* mBrowserObject; 27 HWND mHwnd; 28 29 public: 30 OleInPlaceSite(IOleObject* browserObject, OleInPlaceFrame* inPlaceFrame, HWND h); ~OleInPlaceSite()31 virtual ~OleInPlaceSite(){ 32 mClientSite -> Release(); 33 // mInPlaceFrame -> Release(); 34 mBrowserObject -> Release(); 35 mHwnd = 0; 36 } 37 void setBrowserObject(IOleObject* o); 38 setClientSite(OleClientSite * o)39 void setClientSite(OleClientSite* o) {mClientSite=o;} 40 41 public: // IOleInPlaceSite interface 42 HRESULT STDMETHODCALLTYPE QueryInterface( REFIID riid, LPVOID FAR* ppvObj); 43 AddRef()44 ULONG STDMETHODCALLTYPE AddRef() { 45 return(1); 46 } 47 Release()48 ULONG STDMETHODCALLTYPE Release() { 49 return(1); 50 } 51 GetWindow(HWND FAR * lphwnd)52 HRESULT STDMETHODCALLTYPE GetWindow( HWND FAR* lphwnd) { 53 *lphwnd = mHwnd; 54 return(S_OK); 55 } 56 ContextSensitiveHelp(BOOL fEnterMode)57 HRESULT STDMETHODCALLTYPE ContextSensitiveHelp(BOOL fEnterMode) { 58 NOTIMPLEMENTED; 59 } 60 CanInPlaceActivate()61 HRESULT STDMETHODCALLTYPE CanInPlaceActivate() { 62 return S_OK; 63 } 64 OnInPlaceActivate()65 HRESULT STDMETHODCALLTYPE OnInPlaceActivate() { 66 return S_OK; 67 } 68 OnUIActivate()69 HRESULT STDMETHODCALLTYPE OnUIActivate() { return(S_OK); } 70 GetWindowContext(LPOLEINPLACEFRAME FAR * lplpFrame,LPOLEINPLACEUIWINDOW FAR * lplpDoc,LPRECT lprcPosRect,LPRECT lprcClipRect,LPOLEINPLACEFRAMEINFO lpFrameInfo)71 HRESULT STDMETHODCALLTYPE GetWindowContext( LPOLEINPLACEFRAME FAR* lplpFrame, LPOLEINPLACEUIWINDOW FAR* lplpDoc, LPRECT lprcPosRect, LPRECT lprcClipRect, LPOLEINPLACEFRAMEINFO lpFrameInfo) { 72 *lplpFrame = mInPlaceFrame; 73 *lplpDoc = 0; 74 75 lpFrameInfo->fMDIApp = FALSE; 76 lpFrameInfo->hwndFrame = mHwnd; 77 lpFrameInfo->haccel = 0; 78 lpFrameInfo->cAccelEntries = 0; 79 80 return S_OK; 81 } 82 Scroll(SIZE scrollExtent)83 HRESULT STDMETHODCALLTYPE Scroll(SIZE scrollExtent) { NOTIMPLEMENTED; } 84 OnUIDeactivate(BOOL fUndoable)85 HRESULT STDMETHODCALLTYPE OnUIDeactivate( BOOL fUndoable) { return S_OK; } 86 OnInPlaceDeactivate()87 HRESULT STDMETHODCALLTYPE OnInPlaceDeactivate() { return S_OK; } 88 DiscardUndoState()89 HRESULT STDMETHODCALLTYPE DiscardUndoState() { NOTIMPLEMENTED; } 90 DeactivateAndUndo()91 HRESULT STDMETHODCALLTYPE DeactivateAndUndo() { NOTIMPLEMENTED; } 92 OnPosRectChange(LPCRECT lprcPosRect)93 HRESULT STDMETHODCALLTYPE OnPosRectChange( LPCRECT lprcPosRect) { 94 IOleInPlaceObject *inplace; 95 if (!mBrowserObject->QueryInterface(IID_IOleInPlaceObject, (void**)&inplace)) { 96 inplace->SetObjectRects(lprcPosRect, lprcPosRect); 97 } 98 return(S_OK); 99 } 100 }; 101 } 102 #endif // __G3D_OLE_IN_PLACE_SITE_H__ 103