diff options
author | Pixel <pixel@nobis-crew.org> | 2009-11-04 11:56:41 -0800 |
---|---|---|
committer | Pixel <pixel@nobis-crew.org> | 2009-11-04 11:59:33 -0800 |
commit | d577d991b97ae2b5ee1af23641bcffc3f83af5b2 (patch) | |
tree | 590639d50205d1bcfaff2a7d2dc6ebf3f373c7ed /iup/srcole/tOleControlSite.cpp |
Initial import. Contains the im, cd and iup librairies, and a "working" Makefile for them under linux.
Diffstat (limited to 'iup/srcole/tOleControlSite.cpp')
-rwxr-xr-x | iup/srcole/tOleControlSite.cpp | 301 |
1 files changed, 301 insertions, 0 deletions
diff --git a/iup/srcole/tOleControlSite.cpp b/iup/srcole/tOleControlSite.cpp new file mode 100755 index 0000000..71f3519 --- /dev/null +++ b/iup/srcole/tOleControlSite.cpp @@ -0,0 +1,301 @@ +// tOleControlSite.cpp: implementation of the tOleControlSite class. +// +////////////////////////////////////////////////////////////////////// + +#include "tOleControlSite.h" +#include "tOleHandler.h" + +////////////////////////////////////////////////////////////////////// +// Construction/Destruction +////////////////////////////////////////////////////////////////////// + +/* + * tOleControlSite::tOleControlSite + * tOleControlSite::~tOleControlSite + * + * Parameters (Constructor): + * pTen PCTenant of the object we're in. + * pUnkOuter LPUNKNOWN to which we delegate. + */ + +tOleControlSite::tOleControlSite(tOleHandler *pTen + , LPUNKNOWN pUnkOuter) + { + m_cRef=0; + m_pTen=pTen; + m_pUnkOuter=pUnkOuter; + return; + } + +tOleControlSite::~tOleControlSite(void) + { + return; + } + + + + +/* + * tOleControlSite::QueryInterface + * tOleControlSite::AddRef + * tOleControlSite::Release + * + * Purpose: + * Delegating IUnknown members for tOleControlSite. + */ + +STDMETHODIMP tOleControlSite::QueryInterface(REFIID riid + , LPVOID *ppv) + { + return m_pUnkOuter->QueryInterface(riid, ppv); + } + + +STDMETHODIMP_(ULONG) tOleControlSite::AddRef(void) + { + ++m_cRef; + return m_pUnkOuter->AddRef(); + } + +STDMETHODIMP_(ULONG) tOleControlSite::Release(void) + { + --m_cRef; + return m_pUnkOuter->Release(); + } + + + + + +/* + * tOleControlSite::OnControlInfoChanged + * + * Purpose: + * Informs the site that the CONTROLINFO for the control has + * changed and we thus need to reload the data. + * + * Parameters: + * None + * + * Return Value: + * HRESULT NOERROR + */ + +STDMETHODIMP tOleControlSite::OnControlInfoChanged(void) + { + //We also update our "have info" flag here. + if(m_pTen->m_pIOleControl != NULL) + { + m_pTen->m_fHaveControlInfo=SUCCEEDED(m_pTen->m_pIOleControl + ->GetControlInfo(&m_pTen->m_ctrlInfo)); + } + + return NOERROR; + } + + + + + +/* + * tOleControlSite::LockInPlaceActive + * + * Purpose: + * Forces the container to keep this control in-place active + * (but not UI active) regardless of other considerations, or + * removes this lock. + * + * Parameters: + * fLock BOOL indicating to lock (TRUE) or unlock (FALSE) + * in-place activation. + * + * Return Value: + * HRESULT NOERROR + */ + +STDMETHODIMP tOleControlSite::LockInPlaceActive(BOOL fLock) + { + if (fLock) + m_pTen->m_cLockInPlace++; + else + { + if (0==--m_pTen->m_cLockInPlace) + { + //If there's a pending deactivate, do it now. + if (m_pTen->m_fPendingDeactivate) + m_pTen->DeactivateInPlaceObject(TRUE); + } + } + + return NOERROR; + } + + + + + +/* + * tOleControlSite::GetExtendedControl + * + * Purpose: + * Returns a pointer to the container's extended control that wraps + * the actual control in this site, if one exists. + * + * Parameters: + * ppDispatch LPDISPATCH * in which to return the pointer + * to the extended control's IDispatch interface. + * + * Return Value: + * HRESULT NOERROR or a general error value. + */ + +STDMETHODIMP tOleControlSite::GetExtendedControl(LPDISPATCH + * ppDispatch) + { + *ppDispatch=NULL; + return ResultFromScode(E_NOTIMPL); + } + + + + + + +/* + * tOleControlSite::TransformCoords + * + * Purpose: + * Converts coordinates in HIMETRIC units into those used by the + * container. + * + * Parameters: + * pptlHiMet POINTL * containing either the coordinates to + * transform to container or where to store the + * transformed container coordinates. + * pptlCont POINTF * containing the container coordinates. + * dwFlags DWORD containing instructional flags. + * + * Return Value: + * HRESULT NOERROR or a general error value. + */ + +STDMETHODIMP tOleControlSite::TransformCoords(POINTL *pptlHiMet + , POINTF *pptlCont, DWORD dwFlags) + { + if (NULL==pptlHiMet || NULL==pptlCont) + return ResultFromScode(E_POINTER); + + /* + * Convert coordinates. We use MM_LOMETRIC which means that + * to convert from HIMETRIC we divide by 10 and negate the y + * coordinate. Conversion to HIMETRIC means negate the y + * and multiply by 10. Note that size and position are + * considered the same thing, that is, we don't differentiate + * the two. + */ + + if (XFORMCOORDS_HIMETRICTOCONTAINER & dwFlags) + { + pptlCont->x=(float)(pptlHiMet->x/10); + pptlCont->y=(float)-(pptlHiMet->y/10); + } + else + { + pptlHiMet->x=(long)(pptlCont->x*10); + pptlHiMet->y=(long)-(pptlCont->y*10); + } + + return NOERROR; + } + + + + + +/* + * tOleControlSite::TranslateAccelerator + * + * Purpose: + * Instructs the container to translate a keyboard accelerator + * message that the control has picked up instead. + * + * Parameters: + * pMsg LPMSG to the message to translate. + * grfModifiers DWORD flags with additional instructions. + * + * Return Value: + * HRESULT NOERROR or a general error value. + */ + +STDMETHODIMP tOleControlSite::TranslateAccelerator(LPMSG pMsg + , DWORD grfModifiers) + { + /* + * The control has picked up a keystroke through its own + * TranslateAccelerator and is now giving us the change to + * play with it. Currently there are no flags for + * grfModifiers, so we ignore them. Especially since + * we have nothing to do here ourselves anyway. + */ + return ResultFromScode(S_FALSE); + } + + + + +/* + * tOleControlSite::OnFocus + * + * Purpose: + * Informs the container that focus has either been lost or + * gained in the control. + * + * Parameters: + * fGotFocus BOOL indicating that the control gained (TRUE) + * or lost (FALSE) focus. + * + * Return Value: + * HRESULT NOERROR or a general error value. + */ + +STDMETHODIMP tOleControlSite::OnFocus(BOOL fGotFocus) + { + /* + * Patron doesn't do this, but to handle the default + * and cancel buttons properly, we normally process RETURN + * and ESC accelerators to press the right button. + * This behavior must be disabled when the control with + * the focus has either CTRLINFO_EATS_RETURN or + * CTRLINFO_EATS_ESCAPE set. We tell the frame as + * we need to when a new control gets the focus. We + * do nothing when a control loses the focus. + */ + return NOERROR; + } + + + +/* + * tOleControlSite::ShowPropertyFrame + * + * Purpose: + * Instructs the container to show the property frame if + * this is an extended object and requires its own property + * pages. + * + * Parameters: + * None + * + * Return Value: + * HRESULT NOERROR or a general error value. + */ + +STDMETHODIMP tOleControlSite::ShowPropertyFrame(void) + { + /* + * Returning an error here means that the container has + * no property pages itself for the control, so the + * control should display its own. + */ + return ResultFromScode(E_NOTIMPL); + } |