/****************************************************************************** Copyright (c) 2000 Microsoft Corporation Module Name: Factories.h Abstract: This file contains the declaration of various binary behaviors. Revision History: Davide Massarenti (Dmassare) 07/12/2000 created ******************************************************************************/ #if !defined(__INCLUDED___PCH___FACTORIES_H___) #define __INCLUDED___PCH___FACTORIES_H___ #include // // From BehaviorsTypeLib.idl // #include #define INCREASESIZE(x) x.reserve( (x.size() + 4097) & ~4095 ) //////////////////////////////////////////////////////////////////////////////// typedef IDispatchImpl CPCHBehavior__IDispatch_Event; typedef IDispatchImpl CPCHBehavior__IDispatch_SubSite; typedef IDispatchImpl CPCHBehavior__IDispatch_Tree; typedef IDispatchImpl CPCHBehavior__IDispatch_TreeNode; typedef IDispatchImpl CPCHBehavior__IDispatch_Context; typedef IDispatchImpl CPCHBehavior__IDispatch_State; //////////////////////////////////////////////////////////////////////////////// class ATL_NO_VTABLE CPCHBehavior_EVENT : public CPCHBehavior, public CPCHBehavior__IDispatch_Event { long m_lCookieIN; LONG* m_lCookieOUT; CComQIPtr m_evCurrent; //////////////////// HRESULT onFire( DISPID, DISPPARAMS*, VARIANT* ); public: BEGIN_COM_MAP(CPCHBehavior_EVENT) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(IPCHBehaviors_Common) COM_INTERFACE_ENTRY_CHAIN(CPCHBehavior) END_COM_MAP() CPCHBehavior_EVENT(); virtual ~CPCHBehavior_EVENT(); // // IElementBehavior // STDMETHOD(Init )( /*[in]*/ IElementBehaviorSite* pBehaviorSite ); STDMETHOD(Detach)( ); // // IPCHBehaviors_Common // STDMETHOD(get_data )( /*[out, retval]*/ VARIANT *pVal ); STDMETHOD(get_element)( /*[out, retval]*/ IDispatch* *pVal ); STDMETHOD(Load )( /*[in ]*/ BSTR newVal ); STDMETHOD(Save )( /*[out, retval]*/ BSTR *pVal ); STDMETHOD(Locate )( /*[in]*/ BSTR bstrKey, /*[out, retval]*/ VARIANT *pVal ); STDMETHOD(Unselect)( ); }; ///////////////////////////////////////////////////////////////////////////// class ATL_NO_VTABLE CPCHBehavior_BODY : public CPCHBehavior { HRESULT onEvent( DISPID, DISPPARAMS*, VARIANT* ); //////////////////// public: CPCHBehavior_BODY(); // // IElementBehavior // STDMETHOD(Init)( /*[in]*/ IElementBehaviorSite* pBehaviorSite ); }; ///////////////////////////////////////////////////////////////////////////// class ATL_NO_VTABLE CPCHBehavior_A : public CPCHBehavior { HRESULT onClick( DISPID, DISPPARAMS*, VARIANT* ); HRESULT onMouseMovement( DISPID, DISPPARAMS*, VARIANT* ); public: CPCHBehavior_A(); // // IElementBehavior // STDMETHOD(Init)( /*[in]*/ IElementBehaviorSite* pBehaviorSite ); }; ///////////////////////////////////////////////////////////////////////////// class ATL_NO_VTABLE CPCHBehavior_HANDLE : public CPCHBehavior { bool m_fCaptured; long m_xStart; //////////////////// HRESULT onMouse( DISPID, DISPPARAMS*, VARIANT* ); public: CPCHBehavior_HANDLE(); // // IElementBehavior // STDMETHOD(Init )( /*[in]*/ IElementBehaviorSite* pBehaviorSite ); STDMETHOD(Detach)( ); }; ///////////////////////////////////////////////////////////////////////////// ////class ATL_NO_VTABLE CPCHBehavior_TOPLEVEL : public CPCHBehavior, public CPCHBehavior__IDispatch_SubSite ////{ //// struct Node; //// friend struct Node; //// //// typedef std::list< Node* > List; //// typedef List::iterator Iter; //// typedef List::const_iterator IterConst; //// //// //////////////////////////////////////// //// //// struct Node : public CComObjectRootEx, public IUnknown //// { //// CPCHBehavior_TOPLEVEL* m_owner; //// CComPtr m_qrNode; //// //// CComPtr m_TR_title; //// CComPtr m_TR_description; //// CComPtr m_TD_title; //// CComPtr m_TD_description; //// //// //////////////////// //// //// BEGIN_COM_MAP(Node) //// COM_INTERFACE_ENTRY(IUnknown) //// END_COM_MAP() //// //// Node(); //// //// void Detach(); //// }; //// //// //////////////////////////////////////// //// //// long m_lCookie_onClick; //// long m_lCookie_onContextSelect; //// long m_lCookie_onSelect; //// long m_lCookie_onUnselect; //// //// CComBSTR m_bstrRoot; //// CComPtr m_selectedNode; //// List m_lstNodes; //// //// //////////////////// //// //// HRESULT onMouse( DISPID, DISPPARAMS*, VARIANT* ); //// //// void FromElementToNode( /*[in/out]*/ CComPtr& node, /*[in]*/ IHTMLElement* elem ); //// //// void Empty(); //// ////public: ////BEGIN_COM_MAP(CPCHBehavior_TOPLEVEL) //// COM_INTERFACE_ENTRY(IDispatch) //// COM_INTERFACE_ENTRY(IPCHBehaviors_Common) //// COM_INTERFACE_ENTRY_CHAIN(CPCHBehavior) ////END_COM_MAP() //// //// CPCHBehavior_TOPLEVEL(); //// ~CPCHBehavior_TOPLEVEL(); //// //// // //// // IElementBehavior //// // //// STDMETHOD(Init )( /*[in]*/ IElementBehaviorSite* pBehaviorSite ); //// STDMETHOD(Detach)( ); //// //// //// // //// // IPCHBehaviors_Common //// // //// STDMETHOD(get_data )( /*[out, retval]*/ VARIANT *pVal ); //// STDMETHOD(get_element)( /*[out, retval]*/ IDispatch* *pVal ); //// //// STDMETHOD(Refresh)( ); //// STDMETHOD(Load )( /*[in ]*/ BSTR newVal ); //// STDMETHOD(Save )( /*[out, retval]*/ BSTR *pVal ); //// STDMETHOD(Locate )( /*[in]*/ BSTR bstrKey, /*[out, retval]*/ VARIANT *pVal ); //// //// // //// // IPCHBehaviors_SubSite //// // //// STDMETHOD(get_root)( /*[out, retval]*/ BSTR *pVal ); //// STDMETHOD(put_root)( /*[in ]*/ BSTR newVal ); //// //// STDMETHOD(Select)( /*[in]*/ BSTR bstrNode, /*[in]*/ BSTR bstrURL, /*[in]*/ VARIANT_BOOL fNotify ); ////}; ///////////////////////////////////////////////////////////////////////////// class ATL_NO_VTABLE CPCHBehavior_BasicTree : public CPCHBehavior, public MPC::Thread { protected: struct Node; friend struct Node; typedef std::list< Node* > List; typedef List::iterator Iter; typedef List::const_iterator IterConst; //////////////////////////////////////// typedef enum { NODETYPE__FRAME1 , NODETYPE__FRAME2 , NODETYPE__FRAME3 , NODETYPE__FRAME1_EXPAND, NODETYPE__FRAME2_EXPAND, NODETYPE__FRAME3_EXPAND, NODETYPE__EXPANDO , NODETYPE__EXPANDO_LINK , NODETYPE__EXPANDO_TOPIC, NODETYPE__GROUP , NODETYPE__LINK , NODETYPE__SPACER , } NodeType; typedef enum { SELECTION__NONE , SELECTION__ACTIVE , SELECTION__NEXTACTIVE , SELECTION__NEXTACTIVE_NOTIFY, } SelectionMode; struct Node : public CComObjectRootEx, public IUnknown { CPCHBehavior_BasicTree* m_owner; Node* m_parent; CComBSTR m_bstrNode; NodeType m_iType; SelectionMode m_iSelection; bool m_fLoaded_Self; bool m_fLoaded_Children; bool m_fDisplayed_Self; bool m_fDisplayed_Children; bool m_fInvalid; bool m_fRefreshNotification; bool m_fExpanded; bool m_fMouseOver; bool m_fMouseDown; CComPtr m_parentElement; CComBSTR m_bstrID; CComPtr m_DIV; CComPtr m_IMG; CComPtr m_DIV_children; List m_lstSubnodes; //////////////////// BEGIN_COM_MAP(Node) COM_INTERFACE_ENTRY(IUnknown) END_COM_MAP() Node(); virtual ~Node(); HRESULT Init( /*[in]*/ LPCWSTR szNode, /*[in]*/ NodeType iType = NODETYPE__EXPANDO ); HRESULT NotifyMainThread(); Node* FindNode( /*[in]*/ LPCWSTR szNode, /*[in]*/ bool fUseID ); HRESULT OnMouse( /*[in]*/ DISPID id, /*[in]*/ long lButton, /*[in]*/ long lKey, /*[in]*/ bool fIsImage ); HRESULT LoadHTML( /*[in]*/ LPCWSTR szHTML ); HRESULT GenerateHTML( /*[in]*/ LPCWSTR szTitle, /*[in]*/ LPCWSTR szDescription, /*[in]*/ LPCWSTR szIcon, /*[in]*/ LPCWSTR szURL ); void InsertOptionalTarget( /*[in/out]*/ MPC::wstring& strHTML ); //////////////////// virtual HRESULT Passivate ( ); virtual HRESULT ProcessRefreshRequest( ); virtual HRESULT CreateInstance ( /*[in]*/ CPCHBehavior_BasicTree* owner, /*[in]*/ Node* parent, /*[out]*/ Node*& subnode ) = 0; virtual HRESULT PopulateSelf ( ) = 0; virtual HRESULT PopulateChildren ( ) = 0; virtual HRESULT GenerateSelf ( ) = 0; virtual HRESULT GenerateChildren ( ); virtual HRESULT Display ( ); virtual bool IsParentDisplayingUs ( ); virtual HRESULT Load( /*[in]*/ MPC::Serializer& stream ); virtual HRESULT Save( /*[in]*/ MPC::Serializer& stream, /*[in]*/ bool fSaveChildren ); }; struct NodeToSelect { CComBSTR m_bstrNode; CComBSTR m_bstrURL; bool m_fNotify; }; //////////////////// CComBSTR m_bstrTargetFrame; long m_lCookie_onContextSelect; long m_lCookie_onSelect; long m_lCookie_onUnselect; Node* m_nTopNode; Node* m_nSelected; Node* m_nCurrent; NodeToSelect* m_nToSelect; CPCHTimerHandle m_Timer; bool m_fRefreshing; long m_lNavModel; //////////////////// void Empty (); void ProtectFromDetach (); void UnprotectFromDetach(); HRESULT onMouse( DISPID, DISPPARAMS*, VARIANT* ); HRESULT RefreshThread ( ); void SetRefreshingFlag( /*[in]*/ bool fVal ); void WaitForRefreshing( /*[in]*/ MPC::SmartLock<_ThreadModel>& lock, /*[in]*/ bool fYield = false ); HRESULT NotifyMainThread ( /*[in]*/ Node* node ); HRESULT ChangeSelection ( /*[in]*/ Node* node, /*[in]*/ bool fNotify ); Node* NodeFromElement( /*[in]*/ IHTMLElement* elem ); Node* NodeFromKey ( /*[in]*/ LPCWSTR szNode, /*[in]*/ bool fUseID = false ); HRESULT InterceptInvoke( /*[in]*/ DISPID dispidMember, /*[in]*/ DISPPARAMS* pdispparams ); HRESULT TimerCallback_ScrollIntoView( /*[in]*/ VARIANT ); //////////////////// virtual HRESULT RefreshThread_Enter() = 0; virtual void RefreshThread_Leave() = 0; virtual HRESULT Load( /*[in]*/ MPC::Serializer& stream ); virtual HRESULT Save( /*[in]*/ MPC::Serializer& stream ); HRESULT Persist_Load( /*[in ]*/ BSTR newVal ); HRESULT Persist_Save( /*[out, retval]*/ BSTR *pVal ); public: CPCHBehavior_BasicTree(); ~CPCHBehavior_BasicTree(); void SetNavModel ( /*[in]*/ long lNavModel ) { if(lNavModel != QR_DEFAULT) m_lNavModel = lNavModel; } long GetNavModel ( ) { return m_lNavModel; } NodeToSelect* GetNodeToSelect( ) { return m_nToSelect; } bool IsRTL ( ) { return m_fRTL; } // // IElementBehavior // STDMETHOD(Init )( /*[in]*/ IElementBehaviorSite* pBehaviorSite ); STDMETHOD(Detach)( ); }; ///////////////////////////////////////////////////////////////////////////// class ATL_NO_VTABLE CPCHBehavior_SUBSITE : public CPCHBehavior_BasicTree, public CPCHBehavior__IDispatch_SubSite { protected: struct QueryNode; friend struct QueryNode; //////////////////////////////////////// struct QueryNode : public CPCHBehavior_BasicTree::Node { CComPtr m_qrNode; bool m_fQueryDone; bool m_fTopic; //////////////////// public: QueryNode(); virtual ~QueryNode(); HRESULT Init( /*[in]*/ LPCWSTR szNode, /*[in]*/ NodeType iType, /*[in]*/ CPCHQueryResult* qr, /*[in]*/ bool fTopic ); virtual HRESULT ProcessRefreshRequest( ); virtual HRESULT CreateInstance ( /*[in]*/ CPCHBehavior_BasicTree* owner, /*[in]*/ Node* parent, /*[out]*/ Node*& subnode ); virtual HRESULT PopulateSelf ( ); virtual HRESULT PopulateChildren ( ); virtual HRESULT GenerateSelf ( ); virtual HRESULT Load( /*[in]*/ MPC::Serializer& stream ); virtual HRESULT Save( /*[in]*/ MPC::Serializer& stream, /*[in]*/ bool fSaveChildren ); static HRESULT CreateInstance_QueryNode( /*[in]*/ CPCHBehavior_BasicTree* owner, /*[in]*/ Node* parent, /*[out]*/ Node*& subnode ); }; //////////////////// CPCHProxy_IPCHTaxonomyDatabase* m_db; CComBSTR m_bstrRoot; bool m_fExpand; //////////////////// virtual HRESULT RefreshThread_Enter(); virtual void RefreshThread_Leave(); virtual HRESULT Load( /*[in]*/ MPC::Serializer& stream ); virtual HRESULT Save( /*[in]*/ MPC::Serializer& stream ); public: BEGIN_COM_MAP(CPCHBehavior_SUBSITE) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(IPCHBehaviors_Common) COM_INTERFACE_ENTRY(IPCHBehaviors_SubSite) COM_INTERFACE_ENTRY_CHAIN(CPCHBehavior_BasicTree) END_COM_MAP() CPCHBehavior_SUBSITE(); // // IDispatch // STDMETHOD(Invoke)( DISPID dispidMember , REFIID riid , LCID lcid , WORD wFlags , DISPPARAMS* pdispparams , VARIANT* pvarResult , EXCEPINFO* pexcepinfo , UINT* puArgErr ); // IElementBehavior // STDMETHOD(Init)( /*[in]*/ IElementBehaviorSite* pBehaviorSite ); // // IPCHBehaviors_Common // STDMETHOD(get_data )( /*[out, retval]*/ VARIANT *pVal ); STDMETHOD(get_element)( /*[out, retval]*/ IDispatch* *pVal ); STDMETHOD(Load )( /*[in ]*/ BSTR newVal ); STDMETHOD(Save )( /*[out, retval]*/ BSTR *pVal ); STDMETHOD(Locate )( /*[in]*/ BSTR bstrKey, /*[out, retval]*/ VARIANT *pVal ); STDMETHOD(Unselect)( ); // // IPCHBehaviors_SubSite // STDMETHOD(get_root)( /*[out, retval]*/ BSTR *pVal ); STDMETHOD(put_root)( /*[in ]*/ BSTR newVal ); STDMETHOD(Select)( /*[in]*/ BSTR bstrNode, /*[in]*/ BSTR bstrURL, /*[in]*/ VARIANT_BOOL fNotify ); }; ///////////////////////////////////////////////////////////////////////////// class ATL_NO_VTABLE CPCHBehavior_TREE : public CPCHBehavior_BasicTree, public CPCHBehavior__IDispatch_Tree { protected: struct TreeNode; friend struct TreeNode; friend class CPCHBehavior_TREENODE; //////////////////////////////////////// struct TreeNode : public CPCHBehavior_BasicTree::Node { CComBSTR m_bstrTitle; CComBSTR m_bstrDescription; CComBSTR m_bstrIcon; CComBSTR m_bstrURL; //////////////////// public: TreeNode(); virtual ~TreeNode(); virtual HRESULT CreateInstance ( /*[in]*/ CPCHBehavior_BasicTree* owner, /*[in]*/ Node* parent, /*[out]*/ Node*& subnode ); virtual HRESULT PopulateSelf ( ); virtual HRESULT PopulateChildren( ); virtual HRESULT GenerateSelf ( ); virtual HRESULT Load( /*[in]*/ MPC::Serializer& stream ); virtual HRESULT Save( /*[in]*/ MPC::Serializer& stream, /*[in]*/ bool fSaveChildren ); static HRESULT CreateInstance_TreeNode( /*[in]*/ CPCHBehavior_BasicTree* owner, /*[in]*/ Node* parent, /*[out]*/ Node*& subnode ); static HRESULT PopulateFromXML( /*[in]*/ CPCHBehavior_TREE* owner, /*[in]*/ TreeNode* parent, /*[in]*/ IXMLDOMNode* xdnNode ); }; //////////////////// virtual HRESULT RefreshThread_Enter(); virtual void RefreshThread_Leave(); virtual HRESULT Load( /*[in]*/ MPC::Serializer& stream ); virtual HRESULT Save( /*[in]*/ MPC::Serializer& stream ); HRESULT WrapData( /*[in]*/ TreeNode* node, /*[out, retval]*/ VARIANT* pVal ); public: BEGIN_COM_MAP(CPCHBehavior_TREE) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(IPCHBehaviors_Common) COM_INTERFACE_ENTRY(IPCHBehaviors_Tree) COM_INTERFACE_ENTRY_CHAIN(CPCHBehavior_BasicTree) END_COM_MAP() static NodeType LookupType( /*[in]*/ LPCWSTR szNodeType ); static LPCWSTR LookupType( /*[in]*/ NodeType iNodeType ); // // IDispatch // STDMETHOD(Invoke)( DISPID dispidMember , REFIID riid , LCID lcid , WORD wFlags , DISPPARAMS* pdispparams , VARIANT* pvarResult , EXCEPINFO* pexcepinfo , UINT* puArgErr ); // // IElementBehavior // STDMETHOD(Init)( /*[in]*/ IElementBehaviorSite* pBehaviorSite ); // // IPCHBehaviors_Common // STDMETHOD(get_data )( /*[out, retval]*/ VARIANT *pVal ); STDMETHOD(get_element)( /*[out, retval]*/ IDispatch* *pVal ); STDMETHOD(Load )( /*[in ]*/ BSTR newVal ); STDMETHOD(Save )( /*[out, retval]*/ BSTR *pVal ); STDMETHOD(Locate )( /*[in]*/ BSTR bstrKey, /*[out, retval]*/ VARIANT *pVal ); STDMETHOD(Unselect)( ); // // IPCHBehaviors_Tree // STDMETHOD(Populate)( /*[in]*/ VARIANT newVal ); }; class ATL_NO_VTABLE CPCHBehavior_TREENODE : public CComObjectRootEx, public CPCHBehavior__IDispatch_TreeNode { friend class CPCHBehavior_TREE; CPCHBehavior_TREE::TreeNode* m_data; public: BEGIN_COM_MAP(CPCHBehavior_TREENODE) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(IPCHBehaviors_TreeNode) END_COM_MAP() CPCHBehavior_TREENODE(); ~CPCHBehavior_TREENODE(); // // IPCHBehaviors_TreeNode // STDMETHOD(get_Type )( /*[out, retval]*/ BSTR *pVal ); STDMETHOD(get_Key )( /*[out, retval]*/ BSTR *pVal ); STDMETHOD(get_Title )( /*[out, retval]*/ BSTR *pVal ); STDMETHOD(get_Description)( /*[out, retval]*/ BSTR *pVal ); STDMETHOD(get_Icon )( /*[out, retval]*/ BSTR *pVal ); STDMETHOD(get_URL )( /*[out, retval]*/ BSTR *pVal ); }; ///////////////////////////////////////////////////////////////////////////// class ATL_NO_VTABLE CPCHBehavior_CONTEXT : public CPCHBehavior, public CPCHBehavior__IDispatch_Context { public: BEGIN_COM_MAP(CPCHBehavior_CONTEXT) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(IPCHBehaviors_Context) COM_INTERFACE_ENTRY_CHAIN(CPCHBehavior) END_COM_MAP() // // IElementBehavior // STDMETHOD(Init)( /*[in]*/ IElementBehaviorSite* pBehaviorSite ); // // IPCHBehaviors_TreeNode // STDMETHOD(get_minimized)( /*[out, retval]*/ VARIANT_BOOL *pVal ); STDMETHOD(put_minimized)( /*[in ]*/ VARIANT_BOOL newVal ); STDMETHOD(get_maximized)( /*[out, retval]*/ VARIANT_BOOL *pVal ); STDMETHOD(put_maximized)( /*[in ]*/ VARIANT_BOOL newVal ); STDMETHOD(get_x )( /*[out, retval]*/ long *pVal ); STDMETHOD(get_y )( /*[out, retval]*/ long *pVal ); STDMETHOD(get_width )( /*[out, retval]*/ long *pVal ); STDMETHOD(get_height )( /*[out, retval]*/ long *pVal ); STDMETHOD(changeContext )( /*[in]*/ BSTR bstrName, /*[in,optional]*/ VARIANT vInfo, /*[in,optional]*/ VARIANT vURL ); STDMETHOD(setWindowDimensions)( /*[in]*/ long lX, /*[in]*/ long lY, /*[in]*/ long lW, /*[in]*/ long lH ); STDMETHOD(bringToForeground )(); }; ///////////////////////////////////////////////////////////////////////////// class ATL_NO_VTABLE CPCHBehavior_STATE : public CPCHBehavior, public CPCHBehavior__IDispatch_State { long m_lCookie_PERSISTLOAD; long m_lCookie_PERSISTSAVE; CComBSTR m_bstrIdentity; //////////////////// HRESULT onPersistLoad( DISPID, DISPPARAMS*, VARIANT* ); HRESULT onPersistSave( DISPID, DISPPARAMS*, VARIANT* ); public: BEGIN_COM_MAP(CPCHBehavior_STATE) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(IPCHBehaviors_State) COM_INTERFACE_ENTRY_CHAIN(CPCHBehavior) END_COM_MAP() CPCHBehavior_STATE(); // // IElementBehavior // STDMETHOD(Init )( /*[in]*/ IElementBehaviorSite* pBehaviorSite ); STDMETHOD(Notify)( /*[in]*/ LONG lEvent, /*[in/out]*/ VARIANT* pVar ); STDMETHOD(Detach)( ); // // IPCHBehaviors_State // STDMETHOD(get_stateProperty)( /*[in]*/ BSTR bstrName, /*[out, retval]*/ VARIANT *pVal ); STDMETHOD(put_stateProperty)( /*[in]*/ BSTR bstrName, /*[in] */ VARIANT newVal ); }; ///////////////////////////////////////////////////////////////////////////// class ATL_NO_VTABLE CPCHBehavior_GRADIENT : public CPCHBehavior, public IHTMLPainter { long m_lCookie; COLORREF m_clsStart; COLORREF m_clsEnd; bool m_fHorizontal; bool m_fReturnToZero; void GetColors( /*[in]*/ bool fForce ); HRESULT onEvent( DISPID, DISPPARAMS*, VARIANT* ); //////////////////// public: BEGIN_COM_MAP(CPCHBehavior_GRADIENT) COM_INTERFACE_ENTRY(IHTMLPainter) COM_INTERFACE_ENTRY_CHAIN(CPCHBehavior) END_COM_MAP() CPCHBehavior_GRADIENT(); // // IElementBehavior // STDMETHOD(Init )( /*[in]*/ IElementBehaviorSite* pBehaviorSite ); STDMETHOD(Detach)( ); // // IHTMLPainter // STDMETHOD(Draw)( /*[in]*/ RECT rcBounds , /*[in]*/ RECT rcUpdate , /*[in]*/ LONG lDrawFlags , /*[in]*/ HDC hdc , /*[in]*/ LPVOID pvDrawObject ); STDMETHOD(GetPainterInfo)( /*[in]*/ HTML_PAINTER_INFO *pInfo ); STDMETHOD(HitTestPoint)( /*[in]*/ POINT pt , /*[in]*/ BOOL* pbHit , /*[in]*/ LONG* plPartID ); STDMETHOD(OnResize)( /*[in]*/ SIZE pt ); }; ///////////////////////////////////////////////////////////////////////////// class ATL_NO_VTABLE CPCHBehavior_BITMAP : public CPCHBehavior, public IHTMLPainter { CComBSTR m_bstrBaseURL; CComBSTR m_bstrImage; CComBSTR m_bstrImageNormal; CComBSTR m_bstrImageMouseOver; CComBSTR m_bstrImageMouseDown; bool m_fFlipH; bool m_fAutoRTL; HIMAGELIST m_himl; HBITMAP m_hBMP; BITMAP m_bm; LONG m_lWidth; LONG m_lHeight; bool m_fMouseOver; bool m_fMouseDown; //////////////////// void ReleaseImage( /*[in]*/ bool fOnlyIL ); HRESULT GrabImage ( ); HRESULT ScaleImage ( /*[in]*/ LPRECT prc ); HRESULT RefreshImages(); HRESULT onMouse( DISPID, DISPPARAMS*, VARIANT* ); public: BEGIN_COM_MAP(CPCHBehavior_BITMAP) COM_INTERFACE_ENTRY(IHTMLPainter) COM_INTERFACE_ENTRY_CHAIN(CPCHBehavior) END_COM_MAP() CPCHBehavior_BITMAP(); virtual ~CPCHBehavior_BITMAP(); // // IElementBehavior // STDMETHOD(Init)( /*[in]*/ IElementBehaviorSite* pBehaviorSite ); // // IHTMLPainter // STDMETHOD(Draw)( /*[in]*/ RECT rcBounds , /*[in]*/ RECT rcUpdate , /*[in]*/ LONG lDrawFlags , /*[in]*/ HDC hdc , /*[in]*/ LPVOID pvDrawObject ); STDMETHOD(GetPainterInfo)( /*[in]*/ HTML_PAINTER_INFO *pInfo ); STDMETHOD(HitTestPoint)( /*[in]*/ POINT pt , /*[in]*/ BOOL* pbHit , /*[in]*/ LONG* plPartID ); STDMETHOD(OnResize)( /*[in]*/ SIZE pt ); }; ///////////////////////////////////////////////////////////////////////////// #endif // !defined(__INCLUDED___PCH___BEHAVIORS_H___)