/****************************************************************************** Copyright (c) 2001 Microsoft Corporation Module Name: Toolbar.cpp Abstract: This file contains the declaration of the ActiveX control that makes Win32 ToolBars available to HTML. Revision History: Davide Massarenti (Dmassare) 03/04/2001 created ******************************************************************************/ #if !defined(__INCLUDED___PCH___HTMLTOOLBAR_H___) #define __INCLUDED___PCH___HTMLTOOLBAR_H___ #include MIDL_INTERFACE("FC7D9EA1-3F9E-11d3-93C0-00C04F72DAF7") IPCHToolBarPrivate : public IUnknown { public: STDMETHOD(SameObject)( /*[in]*/ IPCHToolBar* ptr ); }; class ATL_NO_VTABLE CPCHToolBar : public MPC::ConnectionPointImpl < CPCHToolBar, &DIID_DPCHToolBarEvents, CComSingleThreadModel >, public IProvideClassInfo2Impl <&CLSID_PCHToolBar, &DIID_DPCHToolBarEvents, &LIBID_HelpCenterTypeLib>, public IDispatchImpl < IPCHToolBar, & IID_IPCHToolBar , &LIBID_HelpCenterTypeLib>, public CComControl , public IPersistPropertyBagImpl , public IOleControlImpl , public IOleObjectImpl , public IOleInPlaceActiveObjectImpl , public IViewObjectExImpl , public IOleInPlaceObjectWindowlessImpl, public CComCoClass , public IPCHToolBarPrivate { typedef enum { TYPE_invalid , TYPE_back , TYPE_forward , TYPE_separator, TYPE_generic , } Types; static const MPC::StringToBitField c_TypeLookup[]; class Button : public MPC::Config::TypeConstructor { DECLARE_CONFIG_MAP(Button); public: MPC::wstring m_strID; WCHAR m_wch; bool m_fEnabled; bool m_fVisible; bool m_fHideText; bool m_fSystemMenu; DWORD m_dwType; MPC::wstring m_strImage_Normal; MPC::wstring m_strImage_Hot; MPC::wstring m_strText; MPC::wstring m_strToolTip; int m_idCmd; int m_iImage_Normal; int m_iImage_Hot; //////////////////////////////////////// // // MPC::Config::TypeConstructor // DEFINE_CONFIG_DEFAULTTAG(); DECLARE_CONFIG_METHODS(); // //////////////////////////////////////// Button(); void UpdateState( /*[in]*/ HWND hwndTB ); }; class Config : public MPC::Config::TypeConstructor { DECLARE_CONFIG_MAP(Config); public: typedef std::list< Button > ButtonList; typedef ButtonList::iterator ButtonIter; typedef ButtonList::const_iterator ButtonIterConst; long m_lWidth; long m_lHeight; long m_lIconSize; bool m_fRTL; TB_MODE m_mode; ButtonList m_lstButtons; HIMAGELIST m_himlNormal; HIMAGELIST m_himlHot; //////////////////////////////////////// // // MPC::Config::TypeConstructor // DEFINE_CONFIG_DEFAULTTAG(); DECLARE_CONFIG_METHODS(); // //////////////////////////////////////// Config(); Button* LookupButton( /*[in]*/ LPCWSTR szID, /*[in]*/ int idCmd ); void Reset( ); HRESULT Load ( /*[in]*/ LPCWSTR szBaseURL, /*[in]*/ LPCWSTR szDefinition, /*[in]*/ LPCWSTR szDir ); HRESULT CreateButtons( /*[in]*/ HWND hwndTB ); void UpdateSize ( /*[in]*/ HWND hwndTB, /*[in]*/ HWND hwndRB, /*[out]*/ SIZEL& ptIdeal ); //////////////////// HRESULT MergeImage( /*[in]*/ LPCWSTR szBaseURL, /*[in]*/ LPCWSTR szRelativeURL, /*[in ]*/ HIMAGELIST himl, /*[out]*/ int& iImage ); }; //////////////////////////////////////////////////////////////////////////////// CPCHHelpCenterExternal* m_parent; HWND m_hwndRB; HWND m_hwndTB; CComBSTR m_bstrBaseURL; CComBSTR m_bstrDefinition; Config m_cfg; bool m_fLoaded; //////////////////////////////////////// // // Event firing methods. // HRESULT Fire_onCommand( /*[in]*/ Button* bt ); HRESULT Fire_onCommand( /*[in]*/ UINT_PTR iCmd ); //////////////////////////////////////// HRESULT OnTooltipRequest ( int idCtrl, LPNMTBGETINFOTIPW tool ); HRESULT OnDispInfoRequest( int idCtrl, LPNMTBDISPINFOW info ); HRESULT OnDropDown ( int idCtrl, LPNMTOOLBAR tool ); HRESULT OnChevron ( int idCtrl, LPNMREBARCHEVRON chev ); void UpdateSize(); void Config_Clear(); HRESULT Config_Load (); HRESULT Toolbar_Create(); HRESULT Rebar_Create (); HRESULT Rebar_AddBand (); public: DECLARE_NO_REGISTRY() DECLARE_NOT_AGGREGATABLE(CPCHToolBar) DECLARE_PROTECT_FINAL_CONSTRUCT() BEGIN_COM_MAP(CPCHToolBar) COM_INTERFACE_ENTRY(IPCHToolBar) COM_INTERFACE_ENTRY2(IDispatch, IPCHToolBar) COM_INTERFACE_ENTRY(IConnectionPointContainer) COM_INTERFACE_ENTRY(IProvideClassInfo) COM_INTERFACE_ENTRY(IProvideClassInfo2) COM_INTERFACE_ENTRY(IViewObjectEx) COM_INTERFACE_ENTRY(IViewObject2) COM_INTERFACE_ENTRY(IViewObject) COM_INTERFACE_ENTRY(IOleInPlaceObjectWindowless) COM_INTERFACE_ENTRY(IOleInPlaceObject) COM_INTERFACE_ENTRY2(IOleWindow, IOleInPlaceObjectWindowless) COM_INTERFACE_ENTRY(IOleInPlaceActiveObject) COM_INTERFACE_ENTRY(IOleControl) COM_INTERFACE_ENTRY(IOleObject) COM_INTERFACE_ENTRY(IPersistPropertyBag) COM_INTERFACE_ENTRY2(IPersist, IPersistPropertyBag) COM_INTERFACE_ENTRY(IPCHToolBarPrivate) END_COM_MAP() BEGIN_PROP_MAP(CPCHToolBar) PROP_ENTRY("Definition", DISPID_PCH_TB__DEFINITION, CLSID_NULL) END_PROP_MAP() CPCHToolBar(); virtual ~CPCHToolBar(); BOOL ProcessWindowMessage( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT& lResult, DWORD dwMsgMapID = 0 ); BOOL ProcessAccessKey( UINT uMsg, WPARAM wParam, LPARAM lParam ); BOOL PreTranslateAccelerator( LPMSG pMsg, HRESULT& hRet ); // IViewObjectEx DECLARE_VIEW_STATUS(0) // IOleObject STDMETHOD(SetClientSite)(IOleClientSite *pClientSite); STDMETHOD(GetExtent )(DWORD dwDrawAspect, SIZEL *psizel); // IPCHToolBar public: STDMETHOD(get_Definition)( /*[out, retval]*/ BSTR * pVal ); STDMETHOD(put_Definition)( /*[in ]*/ BSTR newVal ); STDMETHOD(get_Mode )( /*[out, retval]*/ TB_MODE * pVal ); STDMETHOD(put_Mode )( /*[in ]*/ TB_MODE newVal ); STDMETHOD(SetState )( /*[in]*/ BSTR bstrText, /*[in]*/ VARIANT_BOOL fEnabled ); STDMETHOD(SetVisibility)( /*[in]*/ BSTR bstrText, /*[in]*/ VARIANT_BOOL fVisible ); // IPCHToolBarPrivate public: STDMETHOD(SameObject)( /*[in]*/ IPCHToolBar* ptr ) { return this == ptr ? S_OK : E_FAIL; } HRESULT FindElementThroughThunking( /*[out]*/ CComPtr& elem ); }; ///////////////////////////////////////////////////////////////////////////// #endif // !defined(__INCLUDED___PCH___HTMLTOOLBAR_H___)