summaryrefslogtreecommitdiff
path: root/iup/srcole/tOleClientSite.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'iup/srcole/tOleClientSite.cpp')
-rwxr-xr-xiup/srcole/tOleClientSite.cpp148
1 files changed, 148 insertions, 0 deletions
diff --git a/iup/srcole/tOleClientSite.cpp b/iup/srcole/tOleClientSite.cpp
new file mode 100755
index 0000000..314b172
--- /dev/null
+++ b/iup/srcole/tOleClientSite.cpp
@@ -0,0 +1,148 @@
+//////////////////////////////////////////////////////////////////////
+//
+// tOleClientSite.cpp: implementation of the tOleClientSite class.
+//
+//////////////////////////////////////////////////////////////////////
+
+
+#include <windows.h>
+#include <assert.h>
+
+#include "tOleClientSite.h"
+#include "tOleHandler.h"
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+tOleClientSite::tOleClientSite(LPUNKNOWN pUnkOuter,
+ tOleHandler *olehandler)
+{
+ m_cRef=0;
+ m_pUnkOuter = pUnkOuter;
+ handler = olehandler;
+ return;
+}
+
+tOleClientSite::~tOleClientSite()
+{
+
+}
+
+STDMETHODIMP tOleClientSite::QueryInterface(REFIID riid,
+ LPVOID *ppv)
+{
+ return m_pUnkOuter->QueryInterface(riid, ppv);
+}
+
+
+STDMETHODIMP_(ULONG) tOleClientSite::AddRef(void)
+{
+ ++m_cRef;
+ return m_pUnkOuter->AddRef();
+}
+
+STDMETHODIMP_(ULONG) tOleClientSite::Release(void)
+{
+ --m_cRef;
+ return m_pUnkOuter->Release();
+}
+
+STDMETHODIMP tOleClientSite::SaveObject(void)
+{
+ // persistencia ainda nao suportada
+ return E_FAIL;
+}
+
+
+STDMETHODIMP tOleClientSite::GetMoniker(DWORD dwAssign,
+ DWORD dwWhich,
+ LPMONIKER *ppmk)
+{
+ // Linking nao suportado
+ return E_FAIL;
+}
+
+
+STDMETHODIMP tOleClientSite::GetContainer(LPOLECONTAINER * ppContainer)
+{
+
+ *ppContainer=NULL;
+
+ return E_NOINTERFACE;
+}
+
+
+/*
+ * tOleClientSite::ShowObject
+ *
+ * Purpose:
+ * Tells the container to bring the object fully into view as much
+ * as possible, that is, scroll the document.
+ *
+ * Parameters:
+ * None
+ *
+ * Return Value:
+ * HRESULT Standard.
+ */
+
+STDMETHODIMP tOleClientSite::ShowObject(void)
+{
+ return NOERROR;
+}
+
+
+STDMETHODIMP tOleClientSite::OnShowWindow(BOOL fShow)
+{
+ return NOERROR;
+}
+
+/*
+ * tOleClientSite::RequestNewObjectLayout
+ *
+ * Purpose:
+ * Called when the object would like to have its layout
+ * reinitialized. This is used by OLE Controls.
+ *
+ * Parameters:
+ * None
+ *
+ * Return Value:
+ * HRESULT Standard.
+ */
+
+STDMETHODIMP tOleClientSite::RequestNewObjectLayout(void)
+{
+ RECT rc, rcT;
+ SIZEL szl;
+ HRESULT hr;
+
+ /*
+ * This function is called by a control that is not in-place
+ * active or UI active and therefore doesn't have our
+ * IOleInPlaceSite interface in which to call OnPosRectChange.
+ * Therefore we do pretty much the same thing we do in that
+ * function although we ask the control for the size it wants.
+ */
+
+ if (!handler->m_pIViewObject2)
+ return E_FAIL;
+
+ //Get the size from the control
+ hr=handler->m_pIViewObject2->GetExtent(handler->m_fe.dwAspect, -1, NULL, &szl);
+ if (FAILED(hr))
+ return hr;
+
+ //Add these extents to the existing tenant position.
+ SetRect(&rcT, 0, 0, szl.cx*10, -szl.cy*10);
+ RectConvertMappings(&rcT, NULL, TRUE);
+
+ rc=handler->m_rcPos;
+ rc.right=rc.left+rcT.right;
+ rc.bottom=rc.top+rcT.bottom;
+
+ handler->UpdateInPlaceObjectRects(&rc, FALSE);
+ return NOERROR;
+}
+