зеркало из https://github.com/mozilla/pjs.git
First working version
This commit is contained in:
Родитель
42f841cc88
Коммит
132b00b124
|
@ -30,14 +30,28 @@ CControlSite::CControlSite()
|
|||
m_bInPlaceActive = FALSE;
|
||||
m_bUIActive = FALSE;
|
||||
m_bInPlaceLocked = FALSE;
|
||||
m_bWindowless = FALSE;
|
||||
|
||||
// Initialise ambient properties
|
||||
m_nAmbientLocale = 0;
|
||||
m_clrAmbientForeColor = RGB(255,255,255);
|
||||
m_clrAmbientBackColor = RGB(255,0,0);
|
||||
m_bAmbientUserMode = true;
|
||||
m_bAmbientShowHatching = true;
|
||||
m_bAmbientShowGrabHandles = true;
|
||||
}
|
||||
|
||||
|
||||
CControlSite::~CControlSite()
|
||||
{
|
||||
}
|
||||
|
||||
HRESULT CControlSite::InitNew(REFCLSID clsid)
|
||||
|
||||
HRESULT CControlSite::Attach(REFCLSID clsid, HWND hwndParent, const RECT &rcPos, IStream *pInitStream)
|
||||
{
|
||||
m_hwndParent = hwndParent;
|
||||
m_rcObjectPos = rcPos;
|
||||
|
||||
// TODO see if object is script safe
|
||||
|
||||
// Create the object
|
||||
|
@ -74,7 +88,20 @@ HRESULT CControlSite::InitNew(REFCLSID clsid)
|
|||
m_spIOleObject->SetClientSite(this);
|
||||
}
|
||||
|
||||
// TODO load the control from store
|
||||
// Initialise the control from store
|
||||
CComQIPtr<IPersistStream, &IID_IPersistStream> spIPersistStream = m_spIOleObject;
|
||||
CComQIPtr<IPersistStreamInit, &IID_IPersistStreamInit> spIPersistStreamInit = m_spIOleObject;
|
||||
if (spIPersistStreamInit && pInitStream == NULL)
|
||||
{
|
||||
spIPersistStreamInit->InitNew();
|
||||
}
|
||||
else if (pInitStream)
|
||||
{
|
||||
spIPersistStream->Load(pInitStream);
|
||||
}
|
||||
|
||||
m_spIOleInPlaceObject = m_spObject;
|
||||
m_spIOleInPlaceObject->SetObjectRects(&m_rcObjectPos, &m_rcObjectPos);
|
||||
|
||||
// In-place activate the object
|
||||
if (m_bVisibleAtRuntime)
|
||||
|
@ -89,11 +116,56 @@ HRESULT CControlSite::InitNew(REFCLSID clsid)
|
|||
m_spIOleObject->SetClientSite(this);
|
||||
}
|
||||
|
||||
// TODO create new
|
||||
return E_NOTIMPL;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
HRESULT CControlSite::Detach()
|
||||
{
|
||||
if (m_spIOleInPlaceObject)
|
||||
{
|
||||
m_spIOleInPlaceObject->InPlaceDeactivate();
|
||||
m_spIOleInPlaceObject.Release();
|
||||
}
|
||||
|
||||
if (m_spIOleObject)
|
||||
{
|
||||
m_spIOleObject->SetClientSite(this);
|
||||
m_spIOleObject.Release();
|
||||
}
|
||||
|
||||
m_spIViewObject.Release();
|
||||
m_spObject.Release();
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
HRESULT CControlSite::GetControlUnknown(IUnknown **ppObject)
|
||||
{
|
||||
*ppObject = NULL;
|
||||
if (m_spObject)
|
||||
{
|
||||
m_spObject->QueryInterface(IID_IUnknown, (void **) ppObject);
|
||||
}
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
HRESULT CControlSite::Draw(HDC hdc)
|
||||
{
|
||||
// Draw only when control is windowless or deactivated
|
||||
if (m_spIViewObject)
|
||||
{
|
||||
if (m_bWindowless || !m_bInPlaceActive)
|
||||
{
|
||||
RECTL *prcBounds = (m_bWindowless) ? NULL : (RECTL *) &m_rcObjectPos;
|
||||
m_spIViewObject->Draw(DVASPECT_CONTENT, -1, NULL, NULL, NULL, hdc, prcBounds, NULL, NULL, 0);
|
||||
}
|
||||
}
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT CControlSite::DoVerb(LONG nVerb, LPMSG lpMsg)
|
||||
{
|
||||
if (m_spIOleObject == NULL)
|
||||
|
@ -105,13 +177,123 @@ HRESULT CControlSite::DoVerb(LONG nVerb, LPMSG lpMsg)
|
|||
}
|
||||
|
||||
|
||||
HRESULT CControlSite::SetObjectPos(const RECT &rcPos)
|
||||
HRESULT CControlSite::SetPosition(const RECT &rcPos)
|
||||
{
|
||||
m_rcObjectPos = rcPos;
|
||||
m_spIOleInPlaceObject->SetObjectRects(&m_rcObjectPos, &m_rcObjectPos);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// IDispatch implementation
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::GetTypeInfoCount(/* [out] */ UINT __RPC_FAR *pctinfo)
|
||||
{
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::GetTypeInfo(/* [in] */ UINT iTInfo, /* [in] */ LCID lcid, /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo)
|
||||
{
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::GetIDsOfNames(/* [in] */ REFIID riid, /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames, /* [in] */ UINT cNames, /* [in] */ LCID lcid, /* [size_is][out] */ DISPID __RPC_FAR *rgDispId)
|
||||
{
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::Invoke(/* [in] */ DISPID dispIdMember, /* [in] */ REFIID riid, /* [in] */ LCID lcid, /* [in] */ WORD wFlags, /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams, /* [out] */ VARIANT __RPC_FAR *pVarResult, /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo, /* [out] */ UINT __RPC_FAR *puArgErr)
|
||||
{
|
||||
if (wFlags & DISPATCH_PROPERTYGET)
|
||||
{
|
||||
CComVariant vResult;
|
||||
|
||||
switch (dispIdMember)
|
||||
{
|
||||
case DISPID_AMBIENT_FORECOLOR:
|
||||
vResult = CComVariant((long) m_clrAmbientForeColor);
|
||||
break;
|
||||
|
||||
case DISPID_AMBIENT_BACKCOLOR:
|
||||
vResult = CComVariant((long) m_clrAmbientBackColor);
|
||||
break;
|
||||
|
||||
case DISPID_AMBIENT_LOCALEID:
|
||||
vResult = CComVariant((long) m_nAmbientLocale);
|
||||
break;
|
||||
|
||||
case DISPID_AMBIENT_USERMODE:
|
||||
vResult = CComVariant(m_bAmbientUserMode);
|
||||
break;
|
||||
|
||||
case DISPID_AMBIENT_SHOWGRABHANDLES:
|
||||
vResult = CComVariant(m_bAmbientShowGrabHandles);
|
||||
break;
|
||||
|
||||
case DISPID_AMBIENT_SHOWHATCHING:
|
||||
vResult = CComVariant(m_bAmbientShowHatching);
|
||||
break;
|
||||
|
||||
default:
|
||||
return DISP_E_MEMBERNOTFOUND;
|
||||
}
|
||||
|
||||
VariantCopy(pVarResult, &vResult);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// IAdviseSink implementation
|
||||
|
||||
void STDMETHODCALLTYPE CControlSite::OnDataChange(/* [unique][in] */ FORMATETC __RPC_FAR *pFormatetc, /* [unique][in] */ STGMEDIUM __RPC_FAR *pStgmed)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void STDMETHODCALLTYPE CControlSite::OnViewChange(/* [in] */ DWORD dwAspect, /* [in] */ LONG lindex)
|
||||
{
|
||||
// TODO redraw
|
||||
}
|
||||
|
||||
|
||||
void STDMETHODCALLTYPE CControlSite::OnRename(/* [in] */ IMoniker __RPC_FAR *pmk)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void STDMETHODCALLTYPE CControlSite::OnSave(void)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void STDMETHODCALLTYPE CControlSite::OnClose(void)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// IAdviseSink2 implementation
|
||||
void STDMETHODCALLTYPE CControlSite::OnLinkSrcChange(/* [unique][in] */ IMoniker __RPC_FAR *pmk)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// IAdviseSinkEx implementation
|
||||
|
||||
void STDMETHODCALLTYPE CControlSite::OnViewStatusChange(/* [in] */ DWORD dwViewStatus)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// IOleWindow implementation
|
||||
|
||||
|
@ -121,6 +303,7 @@ HRESULT STDMETHODCALLTYPE CControlSite::GetWindow(/* [out] */ HWND __RPC_FAR *ph
|
|||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::ContextSensitiveHelp(/* [in] */ BOOL fEnterMode)
|
||||
{
|
||||
return S_OK;
|
||||
|
@ -135,26 +318,31 @@ HRESULT STDMETHODCALLTYPE CControlSite::SaveObject(void)
|
|||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::GetMoniker(/* [in] */ DWORD dwAssign, /* [in] */ DWORD dwWhichMoniker, /* [out] */ IMoniker __RPC_FAR *__RPC_FAR *ppmk)
|
||||
{
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::GetContainer(/* [out] */ IOleContainer __RPC_FAR *__RPC_FAR *ppContainer)
|
||||
{
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::ShowObject(void)
|
||||
{
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::OnShowWindow(/* [in] */ BOOL fShow)
|
||||
{
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::RequestNewObjectLayout(void)
|
||||
{
|
||||
return E_NOTIMPL;
|
||||
|
@ -170,55 +358,158 @@ HRESULT STDMETHODCALLTYPE CControlSite::CanInPlaceActivate(void)
|
|||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::OnInPlaceActivate(void)
|
||||
{
|
||||
m_bInPlaceActive = TRUE;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::OnUIActivate(void)
|
||||
{
|
||||
m_bUIActive = TRUE;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::GetWindowContext(/* [out] */ IOleInPlaceFrame __RPC_FAR *__RPC_FAR *ppFrame, /* [out] */ IOleInPlaceUIWindow __RPC_FAR *__RPC_FAR *ppDoc, /* [out] */ LPRECT lprcPosRect, /* [out] */ LPRECT lprcClipRect, /* [out][in] */ LPOLEINPLACEFRAMEINFO lpFrameInfo)
|
||||
{
|
||||
return E_NOTIMPL;
|
||||
*lprcPosRect = m_rcObjectPos;
|
||||
*lprcClipRect = m_rcObjectPos;
|
||||
|
||||
lpFrameInfo->fMDIApp = FALSE;
|
||||
lpFrameInfo->hwndFrame = NULL;
|
||||
lpFrameInfo->haccel = NULL;
|
||||
lpFrameInfo->cAccelEntries = 0;
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::Scroll(/* [in] */ SIZE scrollExtant)
|
||||
{
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::OnUIDeactivate(/* [in] */ BOOL fUndoable)
|
||||
{
|
||||
m_bUIActive = FALSE;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::OnInPlaceDeactivate(void)
|
||||
{
|
||||
m_bInPlaceActive = FALSE;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::DiscardUndoState(void)
|
||||
{
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::DeactivateAndUndo(void)
|
||||
{
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::OnPosRectChange(/* [in] */ LPCRECT lprcPosRect)
|
||||
{
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// IOleInPlaceSiteEx implementation
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::OnInPlaceActivateEx(/* [out] */ BOOL __RPC_FAR *pfNoRedraw, /* [in] */ DWORD dwFlags)
|
||||
{
|
||||
// TODO check if control is windowless
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::OnInPlaceDeactivateEx(/* [in] */ BOOL fNoRedraw)
|
||||
{
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::RequestUIActivate(void)
|
||||
{
|
||||
return S_FALSE;
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// IOleInPlaceSiteWindowless implementation
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::CanWindowlessActivate(void)
|
||||
{
|
||||
// TODO allow windowless activation
|
||||
return S_FALSE;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::GetCapture(void)
|
||||
{
|
||||
// TODO capture the mouse for the object
|
||||
return S_FALSE;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::SetCapture(/* [in] */ BOOL fCapture)
|
||||
{
|
||||
// TODO capture the mouse for the object
|
||||
return S_FALSE;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::GetFocus(void)
|
||||
{
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::SetFocus(/* [in] */ BOOL fFocus)
|
||||
{
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::GetDC(/* [in] */ LPCRECT pRect, /* [in] */ DWORD grfFlags, /* [out] */ HDC __RPC_FAR *phDC)
|
||||
{
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::ReleaseDC(/* [in] */ HDC hDC)
|
||||
{
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::InvalidateRect(/* [in] */ LPCRECT pRect, /* [in] */ BOOL fErase)
|
||||
{
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::InvalidateRgn(/* [in] */ HRGN hRGN, /* [in] */ BOOL fErase)
|
||||
{
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::ScrollRect(/* [in] */ INT dx, /* [in] */ INT dy, /* [in] */ LPCRECT pRectScroll, /* [in] */ LPCRECT pRectClip)
|
||||
{
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::AdjustRect(/* [out][in] */ LPRECT prc)
|
||||
{
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::OnDefWindowMessage(/* [in] */ UINT msg, /* [in] */ WPARAM wParam, /* [in] */ LPARAM lParam, /* [out] */ LRESULT __RPC_FAR *plResult)
|
||||
{
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// IOleControlSite implementation
|
||||
|
@ -228,32 +519,102 @@ HRESULT STDMETHODCALLTYPE CControlSite::OnControlInfoChanged(void)
|
|||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::LockInPlaceActive(/* [in] */ BOOL fLock)
|
||||
{
|
||||
m_bInPlaceLocked = fLock;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::GetExtendedControl(/* [out] */ IDispatch __RPC_FAR *__RPC_FAR *ppDisp)
|
||||
{
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::TransformCoords(/* [out][in] */ POINTL __RPC_FAR *pPtlHimetric, /* [out][in] */ POINTF __RPC_FAR *pPtfContainer, /* [in] */ DWORD dwFlags)
|
||||
{
|
||||
return E_NOTIMPL;
|
||||
HRESULT hr = S_OK;
|
||||
|
||||
if (pPtlHimetric == NULL)
|
||||
{
|
||||
return E_INVALIDARG;
|
||||
}
|
||||
if (pPtfContainer == NULL)
|
||||
{
|
||||
return E_INVALIDARG;
|
||||
}
|
||||
|
||||
HDC hdc = ::GetDC(m_hwndParent);
|
||||
::SetMapMode(hdc, MM_HIMETRIC);
|
||||
POINT rgptConvert[2];
|
||||
rgptConvert[0].x = 0;
|
||||
rgptConvert[0].y = 0;
|
||||
|
||||
if (dwFlags & XFORMCOORDS_HIMETRICTOCONTAINER)
|
||||
{
|
||||
rgptConvert[1].x = pPtlHimetric->x;
|
||||
rgptConvert[1].y = pPtlHimetric->y;
|
||||
::LPtoDP(hdc, rgptConvert, 2);
|
||||
if (dwFlags & XFORMCOORDS_SIZE)
|
||||
{
|
||||
pPtfContainer->x = (float)(rgptConvert[1].x - rgptConvert[0].x);
|
||||
pPtfContainer->y = (float)(rgptConvert[0].y - rgptConvert[1].y);
|
||||
}
|
||||
else if (dwFlags & XFORMCOORDS_POSITION)
|
||||
{
|
||||
pPtfContainer->x = (float)rgptConvert[1].x;
|
||||
pPtfContainer->y = (float)rgptConvert[1].y;
|
||||
}
|
||||
else
|
||||
{
|
||||
hr = E_INVALIDARG;
|
||||
}
|
||||
}
|
||||
else if (dwFlags & XFORMCOORDS_CONTAINERTOHIMETRIC)
|
||||
{
|
||||
rgptConvert[1].x = (int)(pPtfContainer->x);
|
||||
rgptConvert[1].y = (int)(pPtfContainer->y);
|
||||
::DPtoLP(hdc, rgptConvert, 2);
|
||||
if (dwFlags & XFORMCOORDS_SIZE)
|
||||
{
|
||||
pPtlHimetric->x = rgptConvert[1].x - rgptConvert[0].x;
|
||||
pPtlHimetric->y = rgptConvert[0].y - rgptConvert[1].y;
|
||||
}
|
||||
else if (dwFlags & XFORMCOORDS_POSITION)
|
||||
{
|
||||
pPtlHimetric->x = rgptConvert[1].x;
|
||||
pPtlHimetric->y = rgptConvert[1].y;
|
||||
}
|
||||
else
|
||||
{
|
||||
hr = E_INVALIDARG;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
hr = E_INVALIDARG;
|
||||
}
|
||||
|
||||
::ReleaseDC(m_hwndParent, hdc);
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::TranslateAccelerator(/* [in] */ MSG __RPC_FAR *pMsg, /* [in] */ DWORD grfModifiers)
|
||||
{
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::OnFocus(/* [in] */ BOOL fGotFocus)
|
||||
{
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CControlSite::ShowPropertyFrame(void)
|
||||
{
|
||||
return E_NOTIMPL;
|
||||
|
|
|
@ -20,8 +20,10 @@
|
|||
|
||||
class CControlSite : public CComObjectRootEx<CComSingleThreadModel>,
|
||||
public IOleClientSite,
|
||||
public IOleInPlaceSite,
|
||||
public IOleControlSite
|
||||
public IOleInPlaceSiteWindowless,
|
||||
public IOleControlSite,
|
||||
public IAdviseSinkEx,
|
||||
public IDispatch
|
||||
{
|
||||
// Handle to parent window
|
||||
HWND m_hwndParent;
|
||||
|
@ -37,6 +39,8 @@ class CControlSite : public CComObjectRootEx<CComSingleThreadModel>,
|
|||
BOOL m_bUIActive;
|
||||
// Flag indicating if control is in-place locked and cannot be deactivated
|
||||
BOOL m_bInPlaceLocked;
|
||||
// Flag indicating if control is windowless
|
||||
BOOL m_bWindowless;
|
||||
|
||||
// Raw pointer to the object
|
||||
CComPtr<IUnknown> m_spObject;
|
||||
|
@ -44,6 +48,22 @@ class CControlSite : public CComObjectRootEx<CComSingleThreadModel>,
|
|||
CComQIPtr<IViewObject, &IID_IViewObject> m_spIViewObject;
|
||||
// Pointer to objects IOleObject interface
|
||||
CComQIPtr<IOleObject, &IID_IOleObject> m_spIOleObject;
|
||||
CComQIPtr<IOleInPlaceObject, &IID_IOleInPlaceObject> m_spIOleInPlaceObject;
|
||||
|
||||
// Ambient properties
|
||||
|
||||
// Locale ID
|
||||
LCID m_nAmbientLocale;
|
||||
// Foreground colour
|
||||
COLORREF m_clrAmbientForeColor;
|
||||
// Background colour
|
||||
COLORREF m_clrAmbientBackColor;
|
||||
// Flag indicating if control should hatch itself
|
||||
bool m_bAmbientShowHatching;
|
||||
// Flag indicating if control should have grab handles
|
||||
bool m_bAmbientShowGrabHandles;
|
||||
// Flag indicating if control is in edit/user mode
|
||||
bool m_bAmbientUserMode;
|
||||
|
||||
public:
|
||||
CControlSite();
|
||||
|
@ -55,14 +75,42 @@ BEGIN_COM_MAP(CControlSite)
|
|||
COM_INTERFACE_ENTRY(IOleWindow)
|
||||
COM_INTERFACE_ENTRY(IOleClientSite)
|
||||
COM_INTERFACE_ENTRY(IOleInPlaceSite)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IOleInPlaceSite, IOleInPlaceSiteWindowless)
|
||||
// COM_INTERFACE_ENTRY_IID(IID_IOleInPlaceSiteEx, IOleInPlaceSiteWindowless)
|
||||
// COM_INTERFACE_ENTRY_IID(IID_IOleInPlaceSiteWindowless, IOleInPlaceSiteWindowless)
|
||||
COM_INTERFACE_ENTRY(IOleControlSite)
|
||||
COM_INTERFACE_ENTRY(IDispatch)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IAdviseSink, IAdviseSinkEx)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IAdviseSink2, IAdviseSinkEx)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IAdviseSinkEx, IAdviseSinkEx)
|
||||
END_COM_MAP()
|
||||
|
||||
|
||||
virtual HRESULT InitNew(REFCLSID clsid);
|
||||
virtual HRESULT SetObjectPos(const RECT &rcPos);
|
||||
virtual HRESULT Attach(REFCLSID clsid, HWND hwndParent, const RECT &rcPos, IStream *pInitStream);
|
||||
virtual HRESULT Detach();
|
||||
virtual HRESULT GetControlUnknown(IUnknown **ppObject);
|
||||
virtual HRESULT SetPosition(const RECT &rcPos);
|
||||
virtual HRESULT Draw(HDC hdc);
|
||||
virtual HRESULT DoVerb(LONG nVerb, LPMSG lpMsg = NULL);
|
||||
|
||||
// IDispatch
|
||||
virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(/* [out] */ UINT __RPC_FAR *pctinfo);
|
||||
virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(/* [in] */ UINT iTInfo, /* [in] */ LCID lcid, /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);
|
||||
virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(/* [in] */ REFIID riid, /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames, /* [in] */ UINT cNames, /* [in] */ LCID lcid, /* [size_is][out] */ DISPID __RPC_FAR *rgDispId);
|
||||
virtual /* [local] */ HRESULT STDMETHODCALLTYPE Invoke(/* [in] */ DISPID dispIdMember, /* [in] */ REFIID riid, /* [in] */ LCID lcid, /* [in] */ WORD wFlags, /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams, /* [out] */ VARIANT __RPC_FAR *pVarResult, /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo, /* [out] */ UINT __RPC_FAR *puArgErr);
|
||||
|
||||
// IAdviseSink implementation
|
||||
virtual /* [local] */ void STDMETHODCALLTYPE OnDataChange(/* [unique][in] */ FORMATETC __RPC_FAR *pFormatetc, /* [unique][in] */ STGMEDIUM __RPC_FAR *pStgmed);
|
||||
virtual /* [local] */ void STDMETHODCALLTYPE OnViewChange(/* [in] */ DWORD dwAspect, /* [in] */ LONG lindex);
|
||||
virtual /* [local] */ void STDMETHODCALLTYPE OnRename(/* [in] */ IMoniker __RPC_FAR *pmk);
|
||||
virtual /* [local] */ void STDMETHODCALLTYPE OnSave(void);
|
||||
virtual /* [local] */ void STDMETHODCALLTYPE OnClose(void);
|
||||
|
||||
// IAdviseSink2
|
||||
virtual /* [local] */ void STDMETHODCALLTYPE OnLinkSrcChange(/* [unique][in] */ IMoniker __RPC_FAR *pmk);
|
||||
|
||||
// IAdviseSinkEx implementation
|
||||
virtual /* [local] */ void STDMETHODCALLTYPE OnViewStatusChange(/* [in] */ DWORD dwViewStatus);
|
||||
|
||||
// IOleWindow implementation
|
||||
virtual /* [input_sync] */ HRESULT STDMETHODCALLTYPE GetWindow(/* [out] */ HWND __RPC_FAR *phwnd);
|
||||
virtual HRESULT STDMETHODCALLTYPE ContextSensitiveHelp(/* [in] */ BOOL fEnterMode);
|
||||
|
@ -87,6 +135,25 @@ END_COM_MAP()
|
|||
virtual HRESULT STDMETHODCALLTYPE DeactivateAndUndo(void);
|
||||
virtual HRESULT STDMETHODCALLTYPE OnPosRectChange(/* [in] */ LPCRECT lprcPosRect);
|
||||
|
||||
// IOleInPlaceSiteEx implementation
|
||||
virtual HRESULT STDMETHODCALLTYPE OnInPlaceActivateEx(/* [out] */ BOOL __RPC_FAR *pfNoRedraw, /* [in] */ DWORD dwFlags);
|
||||
virtual HRESULT STDMETHODCALLTYPE OnInPlaceDeactivateEx(/* [in] */ BOOL fNoRedraw);
|
||||
virtual HRESULT STDMETHODCALLTYPE RequestUIActivate(void);
|
||||
|
||||
// IOleInPlaceSiteWindowless implementation
|
||||
virtual HRESULT STDMETHODCALLTYPE CanWindowlessActivate(void);
|
||||
virtual HRESULT STDMETHODCALLTYPE GetCapture(void);
|
||||
virtual HRESULT STDMETHODCALLTYPE SetCapture(/* [in] */ BOOL fCapture);
|
||||
virtual HRESULT STDMETHODCALLTYPE GetFocus(void);
|
||||
virtual HRESULT STDMETHODCALLTYPE SetFocus(/* [in] */ BOOL fFocus);
|
||||
virtual HRESULT STDMETHODCALLTYPE GetDC(/* [in] */ LPCRECT pRect, /* [in] */ DWORD grfFlags, /* [out] */ HDC __RPC_FAR *phDC);
|
||||
virtual HRESULT STDMETHODCALLTYPE ReleaseDC(/* [in] */ HDC hDC);
|
||||
virtual HRESULT STDMETHODCALLTYPE InvalidateRect(/* [in] */ LPCRECT pRect, /* [in] */ BOOL fErase);
|
||||
virtual HRESULT STDMETHODCALLTYPE InvalidateRgn(/* [in] */ HRGN hRGN, /* [in] */ BOOL fErase);
|
||||
virtual HRESULT STDMETHODCALLTYPE ScrollRect(/* [in] */ INT dx, /* [in] */ INT dy, /* [in] */ LPCRECT pRectScroll, /* [in] */ LPCRECT pRectClip);
|
||||
virtual HRESULT STDMETHODCALLTYPE AdjustRect(/* [out][in] */ LPRECT prc);
|
||||
virtual HRESULT STDMETHODCALLTYPE OnDefWindowMessage(/* [in] */ UINT msg, /* [in] */ WPARAM wParam, /* [in] */ LPARAM lParam, /* [out] */ LRESULT __RPC_FAR *plResult);
|
||||
|
||||
// IOleControlSite implementation
|
||||
virtual HRESULT STDMETHODCALLTYPE OnControlInfoChanged(void);
|
||||
virtual HRESULT STDMETHODCALLTYPE LockInPlaceActive(/* [in] */ BOOL fLock);
|
||||
|
@ -97,4 +164,6 @@ END_COM_MAP()
|
|||
virtual HRESULT STDMETHODCALLTYPE ShowPropertyFrame( void);
|
||||
};
|
||||
|
||||
typedef CComObject<CControlSite> CControlSiteInstance;
|
||||
|
||||
#endif
|
Загрузка…
Ссылка в новой задаче