You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
195 lines
6.6 KiB
195 lines
6.6 KiB
/******************************************************************************
|
|
|
|
Copyright (c) 2000 Microsoft Corporation
|
|
|
|
Module Name:
|
|
Behaviors.h
|
|
|
|
Abstract:
|
|
This file contains the declaration of various classes associated with
|
|
binary behaviors.
|
|
|
|
Revision History:
|
|
Davide Massarenti (Dmassare) 06/06/2000
|
|
created
|
|
|
|
******************************************************************************/
|
|
|
|
#if !defined(__INCLUDED___PCH___BEHAVIORS_H___)
|
|
#define __INCLUDED___PCH___BEHAVIORS_H___
|
|
|
|
#include <mshtmlc.h>
|
|
|
|
class CPCHHelpCenterExternal;
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
class ATL_NO_VTABLE CPCHElementBehaviorFactory : // Hungarian: hcebf
|
|
public CComObjectRootEx<MPC::CComSafeMultiThreadModel>,
|
|
public IServiceProvider,
|
|
public IElementBehaviorFactory
|
|
{
|
|
CPCHHelpCenterExternal* m_parent;
|
|
|
|
public:
|
|
BEGIN_COM_MAP(CPCHElementBehaviorFactory)
|
|
COM_INTERFACE_ENTRY(IServiceProvider)
|
|
COM_INTERFACE_ENTRY(IElementBehaviorFactory)
|
|
END_COM_MAP()
|
|
|
|
CPCHElementBehaviorFactory();
|
|
|
|
void Initialize( /*[in]*/ CPCHHelpCenterExternal* parent );
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
//
|
|
// IServiceProvider
|
|
//
|
|
STDMETHOD(QueryService)( REFGUID guidService, REFIID riid, void **ppv );
|
|
|
|
//
|
|
// IElementBehaviorFactory
|
|
//
|
|
STDMETHOD(FindBehavior)( /*[in]*/ BSTR bstrBehavior ,
|
|
/*[in]*/ BSTR bstrBehaviorUrl ,
|
|
/*[in]*/ IElementBehaviorSite* pSite ,
|
|
/*[out]*/ IElementBehavior* *ppBehavior );
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
class ATL_NO_VTABLE CPCHBehavior :
|
|
public CComObjectRootEx<MPC::CComSafeMultiThreadModel>,
|
|
public IElementBehavior
|
|
{
|
|
public:
|
|
struct EventDescription
|
|
{
|
|
LPCWSTR szName;
|
|
DISPID id;
|
|
};
|
|
|
|
protected:
|
|
typedef HRESULT (CPCHBehavior::*CLASS_METHOD)( DISPID, DISPPARAMS*, VARIANT* );
|
|
|
|
struct EventSink : public IDispatch
|
|
{
|
|
long m_lRef;
|
|
|
|
CPCHBehavior* m_Parent;
|
|
CComPtr<IDispatch> m_elem;
|
|
CComBSTR m_bstrName;
|
|
CLASS_METHOD m_pfn;
|
|
bool m_fAttached;
|
|
DISPID m_idNotifyAs;
|
|
|
|
EventSink( CPCHBehavior* parent );
|
|
~EventSink();
|
|
|
|
HRESULT Attach();
|
|
HRESULT Detach();
|
|
|
|
//
|
|
// IUnknown
|
|
//
|
|
STDMETHOD_(ULONG, AddRef)();
|
|
STDMETHOD_(ULONG, Release)();
|
|
STDMETHOD(QueryInterface)( REFIID iid, void ** ppvObject );
|
|
|
|
//
|
|
// IDispatch
|
|
//
|
|
STDMETHOD(GetTypeInfoCount)( UINT* pctinfo );
|
|
|
|
STDMETHOD(GetTypeInfo)( UINT itinfo ,
|
|
LCID lcid ,
|
|
ITypeInfo* *pptinfo );
|
|
|
|
STDMETHOD(GetIDsOfNames)( REFIID riid ,
|
|
LPOLESTR* rgszNames ,
|
|
UINT cNames ,
|
|
LCID lcid ,
|
|
DISPID* rgdispid );
|
|
|
|
STDMETHOD(Invoke)( DISPID dispidMember ,
|
|
REFIID riid ,
|
|
LCID lcid ,
|
|
WORD wFlags ,
|
|
DISPPARAMS* pdispparams ,
|
|
VARIANT* pvarResult ,
|
|
EXCEPINFO* pexcepinfo ,
|
|
UINT* puArgErr );
|
|
|
|
static HRESULT CreateInstance( /*[in]*/ CPCHBehavior* parent, /*[out]*/ EventSink*& pObj );
|
|
};
|
|
|
|
typedef std::list< EventSink* > SinkList;
|
|
typedef SinkList::iterator SinkIter;
|
|
typedef SinkList::const_iterator SinkIterConst;
|
|
|
|
////////////////////////////////////////
|
|
|
|
CPCHHelpCenterExternal* m_parent;
|
|
|
|
CComPtr<IElementBehaviorSiteOM> m_siteOM;
|
|
CComPtr<IHTMLElement> m_elem;
|
|
CComPtr<IHTMLElement2> m_elem2;
|
|
SinkList m_lstEventSinks;
|
|
bool m_fRTL;
|
|
bool m_fTrusted;
|
|
bool m_fSystem;
|
|
|
|
////////////////////////////////////////
|
|
|
|
HRESULT AttachToEvent( /*[in] */ LPCWSTR szName ,
|
|
/*[in] */ CLASS_METHOD pfn ,
|
|
/*[in] */ IDispatch* elem = NULL ,
|
|
/*[out]*/ IDispatch* *pVal = NULL ,
|
|
/*[in] */ DISPID id = -1 );
|
|
|
|
HRESULT AttachToEvents( /*[in] */ const EventDescription* pEvents ,
|
|
/*[in] */ CLASS_METHOD pfn ,
|
|
/*[in] */ IDispatch* elem = NULL );
|
|
|
|
HRESULT CreateEvent ( /*[in]*/ LPCWSTR szName, /*[out]*/ LONG& lEventCookie );
|
|
|
|
HRESULT GetEventObject ( /*[out]*/ CComPtr<IHTMLEventObj>& ev );
|
|
HRESULT CreateEventObject( /*[out]*/ CComPtr<IHTMLEventObj>& ev );
|
|
HRESULT FireEvent ( /*[in ]*/ IHTMLEventObj* ev, /*[in]*/ LONG lEventCookie );
|
|
HRESULT FireEvent ( /*[in]*/ LONG lEventCookie );
|
|
|
|
HRESULT CancelEvent( /*[in]*/ IHTMLEventObj* ev = NULL, /*[in]*/ VARIANT* pvReturnValue = NULL, /*[in]*/ VARIANT_BOOL fCancelBubble = VARIANT_TRUE );
|
|
|
|
////////////////////////////////////////
|
|
|
|
HRESULT GetEvent_SrcElement( /*[in]*/ CComPtr<IHTMLElement>& elem );
|
|
|
|
////////////////////////////////////////
|
|
|
|
HRESULT GetAsVARIANT ( /*[in]*/ BSTR value, /*[out, retval]*/ VARIANT *pVal );
|
|
HRESULT GetAsVARIANT ( /*[in]*/ IDispatch* value, /*[out, retval]*/ VARIANT *pVal );
|
|
HRESULT GetAsIDISPATCH( /*[in]*/ IDispatch* value, /*[out, retval]*/ IDispatch* *pVal );
|
|
|
|
////////////////////////////////////////
|
|
public:
|
|
BEGIN_COM_MAP(CPCHBehavior)
|
|
COM_INTERFACE_ENTRY(IElementBehavior)
|
|
END_COM_MAP()
|
|
|
|
CPCHBehavior();
|
|
|
|
void Initialize( /*[in]*/ CPCHHelpCenterExternal* parent );
|
|
|
|
//
|
|
// IElementBehavior
|
|
//
|
|
STDMETHOD(Init )( /*[in]*/ IElementBehaviorSite* pBehaviorSite );
|
|
STDMETHOD(Notify)( /*[in]*/ LONG lEvent, /*[in/out]*/ VARIANT* pVar );
|
|
STDMETHOD(Detach)( );
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#endif // !defined(__INCLUDED___PCH___BEHAVIORS_H___)
|