/////////////////////////////////////////////////////// // File: TBBxt.h (Toolbar Button Extension Headers // Author: Karim Farouki // // We declare here three classes: // (1) CToolbarExt a base class that takes care of the // button work for our custom extensions // (2) CToolbarExtBand the object which deals with custom // buttons that plug into bands // (3) CToolbarExtExec the object which deals with custom // buttons (or tools menu items) that exec stuff. // // The latter two are derived from the former #ifndef _TBEXT_H #define _TBEXT_H #include "priv.h" // // Internal interface for accessing ther properties of a button/menu extension. // This interface will likely go away afer IE5B2 when we move this functionality to // a browser helper object. // typedef enum _tagGetPropertyIDs { TBEX_BUTTONTEXT = 100, // VT_BSTR TBEX_TOOLTIPTEXT = 101, // VT_BSTR TBEX_GRAYICON = 102, // HICON as a VT_BYREF TBEX_HOTICON = 103, // HICON as a VT_BYREF TBEX_GRAYICONSM = 104, // HICON as a VT_BYREF TBEX_HOTICONSM = 105, // HICON as a VT_BYREF TBEX_DEFAULTVISIBLE = 106, // VT_BOOL TMEX_MENUTEXT = 200, // VT_BSTR TMEX_STATUSBARTEXT = 201, // VT_BSTR TMEX_CUSTOM_MENU = 202, // VT_BSTR } GETPROPERTYIDS; interface IBrowserExtension : IUnknown { virtual STDMETHODIMP Init(REFGUID refguid) = 0; virtual STDMETHODIMP GetProperty(SHORT iPropID, VARIANTARG * varProperty) = 0; }; class CToolbarExt : public IBrowserExtension, public IOleCommandTarget, public IObjectWithSite { public: // Constructor/Destructor CToolbarExt(); virtual ~CToolbarExt(); // IUnknown Interface Members STDMETHODIMP QueryInterface(const IID& iid, void** ppv); STDMETHODIMP_(ULONG) AddRef(); STDMETHODIMP_(ULONG) Release(); // IBrowserExtension Interface Members STDMETHODIMP Init(REFGUID rguid); STDMETHODIMP GetProperty(SHORT iPropID, VARIANTARG * pvarProperty); // IOleCommandTarget Interface Members STDMETHODIMP QueryStatus(const GUID * pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT * pCmdText); STDMETHODIMP Exec(const GUID * pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT* pvaIn, VARIANT* pvaOut) = 0; // IObjectWithSite Interface Members STDMETHODIMP SetSite(IUnknown* pUnkSite); STDMETHODIMP GetSite(REFIID riid, void ** ppvSite); protected: BOOL _RegGetBoolValue(LPCWSTR pszPropName, BOOL fDefault); BOOL _RegReadString(HKEY hkeyThisExtension, LPCWSTR szPropName, BSTR * pbstrProp, BOOL fExpand = FALSE); HICON _ExtractIcon(LPWSTR pszPath, int resid, int cx, int cy); HRESULT _GetIcon(LPCWSTR pszIcon, int nWidth, int nHeight, HICON& rhIcon, VARIANTARG * pvarProperty); long _cRef; HICON _hIcon; // gray icon regular size HICON _hIconSm; // gray icon small HICON _hHotIcon; // Hot... are color versions of above HICON _hHotIconSm; BSTR _bstrButtonText; // The buttons caption BSTR _bstrToolTip; // This is optional (not supported on our side yet) HKEY _hkeyThisExtension; HKEY _hkeyCurrentLang; // optional location for localized strings IShellBrowser* _pisb; // passed in by IObjectWithSite::SetSite() Used to load band }; class CToolbarExtBand : public CToolbarExt { public: // Constructor / Destructor CToolbarExtBand(); virtual ~CToolbarExtBand(); // Overridden IBrowserExtension Interface Members STDMETHODIMP Init(REFGUID rguid); // Overridden IOleCommandTarget Interface Members STDMETHODIMP QueryStatus(const GUID * pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT * pCmdText); STDMETHODIMP Exec(const GUID * pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT* pvaIn, VARIANT* pvaOut); protected: BOOL _bBandState; // This is a hack... ideally state will be determined from the browser BSTR _bstrBandCLSID; // CLSID of band to load. Kept as BSTR because this is how it is passed // to load the band }; class CToolbarExtExec : public CToolbarExt { public: // Constructor / Destructor CToolbarExtExec(); virtual ~CToolbarExtExec(); // Overridden IBrowserExtension Interface Members STDMETHODIMP Init(REFGUID rguid); STDMETHODIMP GetProperty(SHORT iPropID, VARIANTARG * pvarProperty); // Overridden IObjectWithSite Interface Members STDMETHODIMP SetSite(IUnknown* pUnkSite); // Overridden IOleCommandTarget Interface Members STDMETHODIMP QueryStatus(const GUID * pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT * pCmdText); STDMETHODIMP Exec(const GUID * pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT* pvaIn, VARIANT* pvaOut); protected: BOOL _bButton; // Does this object support being a button? BOOL _bMenuItem; // Does it support being a menu item? BOOL _bExecCalled; // if Exec was called BSTR _bstrExec; // Thing to ShellExecute BSTR _bstrScript; // Script to Execute BSTR _bstrMenuText; BSTR _bstrMenuCustomize; // the menu that is to be customized BSTR _bstrMenuStatusBar; IUnknown* _punkExt; // (Optional) created when button is first pressed }; #endif // _TBEXT_H