|
|
/**************************************************************\
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 */
|