windows-nt/Source/XPSP1/NT/shell/browseui/address.h
2020-09-26 16:20:57 +08:00

138 lines
5.6 KiB
C++

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