/**************************************************************\ FILE: address.h DESCRIPTION: The Class CAddressBand exists to support a "Address" Band ToolBar. This will be used in the Browser's toolbar or can be used in the Start Menu. \**************************************************************/ #ifndef _ADDRESS_H #define _ADDRESS_H #include "bands.h" #include "bandprxy.h" /////////////////////////////////////////////////////////////////// // #DEFINEs /////////////////////////////////////////////////////////////////// // Data Structures /////////////////////////////////////////////////////////////////// // Prototypes /**************************************************************\ CLASS: CAddressBand DESCRIPTION: This Class CAddressBand exists to support a "Address" Band ToolBar. This will be used in the Browser's toolbar or can be used in the Start Menu/Taskbar. If the Band is part of a Browser toolbar, any modifications made to the AddressBar will go the the browser window. By default, the this AddressBand will not point to a browser window when it is on the Taskbar or Start Menu. Anything "executed" in the AddressBar will create a new browser window. Future support may allow for the AddressBand in the taskbar/start menu to reference a currently existing browser window. \**************************************************************/ class CAddressBand : public CToolBand , public IWinEventHandler , public IAddressBand , public IInputObjectSite { public: ////////////////////////////////////////////////////// // Public Interfaces ////////////////////////////////////////////////////// // *** IUnknown *** virtual STDMETHODIMP_(ULONG) AddRef(void) { return CToolBand::AddRef(); }; virtual STDMETHODIMP_(ULONG) Release(void){ return CToolBand::Release(); }; virtual STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppvObj); // *** IOleCommandTarget methods *** virtual STDMETHODIMP QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD rgCmds[], OLECMDTEXT *pcmdtext); // Interface forwarding virtual STDMETHODIMP Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANTARG *pvarargIn, VARIANTARG *pvarargOut); // Interface forwarding // *** IDockingWindow methods *** virtual STDMETHODIMP ShowDW(BOOL fShow); virtual STDMETHODIMP CloseDW(DWORD dw); // *** IObjectWithSite methods *** virtual STDMETHODIMP SetSite(IUnknown* punkSite); // *** IInputObject methods *** virtual STDMETHODIMP TranslateAcceleratorIO(LPMSG lpMsg); virtual STDMETHODIMP HasFocusIO(void); // *** IInputObjectSite methods *** virtual STDMETHODIMP OnFocusChangeIS(IUnknown *punk, BOOL fSetFocus); // *** IShellToolband methods *** STDMETHOD(GetBandInfo) (THIS_ DWORD dwBandID, DWORD fViewMode, DESKBANDINFO* pdbi) ; // *** IWinEventHandler methods *** virtual STDMETHODIMP OnWinEvent(HWND hwnd, UINT dwMsg, WPARAM wParam, LPARAM lParam, LRESULT* plre); virtual STDMETHODIMP IsWindowOwner(HWND hwnd); // *** IAddressBand methods *** virtual STDMETHODIMP FileSysChange(DWORD dwEvent, LPCITEMIDLIST * ppidl); virtual STDMETHODIMP Refresh(VARIANT * pvarType); // *** IPersistStream methods *** virtual STDMETHODIMP GetClassID(CLSID *pClassID){ *pClassID = CLSID_AddressBand; return S_OK; } virtual STDMETHODIMP Load(IStream *pStm); virtual STDMETHODIMP Save(IStream *pStm, BOOL fClearDirty); virtual STDMETHODIMP IsDirty(void) {return S_OK;} // Indicate that we are dirty and ::Save() needs to be called. protected: ////////////////////////////////////////////////////// // Private Member Functions ////////////////////////////////////////////////////// // Constructor / Destructor CAddressBand(); virtual ~CAddressBand(); HRESULT _CreateAddressBand(IUnknown * punkSite); static LRESULT CALLBACK _ComboExWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); static LRESULT CALLBACK _ComboExEditProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); BOOL _CreateGoButton(); void _InitGoButton(); void _OnGetInfoTip(LPNMTBGETINFOTIP pnmTT); // Friend Functions friend HRESULT CAddressBand_CreateInstance(IUnknown *punkOuter, IUnknown **ppunk, LPCOBJECTINFO poi); ////////////////////////////////////////////////////// // Private Member Variables ////////////////////////////////////////////////////// BOOL _fVertical :1; // Only valid if _fInited == TRUE HWND _hwndEdit; // Address edit control child Window HWND _hwndCombo; // Address combo control child Window BOOL _fVisible:1; // TRUE when the toolbar is visible. BOOL _fGoButton:1; // TRUE if go button is visible IAddressEditBox* _paeb; // IAddressEditBox that controls IWinEventHandler* _pweh; // IWinEventHandler interface for the AddressEditBox object. (Cached for Perf) HIMAGELIST _himlDefault; // default gray-scale go button HIMAGELIST _himlHot; // color go button HWND _hwndTools; // toolbar containing go button WNDPROC _pfnOldWndProc; // Former WndProc of ComboBoxEx WNDPROC _pfnOldEditProc;// Former WndProc of Edit control in ComboBoxEx }; #endif /* _ADDRESS_H */