#ifndef _THEATER_H #define _THEATER_H // Metrics for this view mode #define THEATER_CYTOOLBAR 26 #define CLOSEMIN_HEIGHT 16 #define CLOSEMIN_YOFFSET 1 #define CLOSEMIN_XOFFSET 1 #define CLOSEMIN_WIDTH 54 #define PROGRESS_WIDTH (CLOSEMIN_WIDTH + 2) #define PROGRESS_HEIGHT 6 #define PROGRESS_YPOS (CLOSEMIN_HEIGHT + (2 * CLOSEMIN_YOFFSET) + 1) #define BRAND_YOFFSET 0 #define BRAND_WIDTH 34 #define BRAND_HEIGHT 26 #define CX_HIT (GetSystemMetrics(SM_CXEDGE) * 3) #define CX_BROWOVERLAP (GetSystemMetrics(SM_CXEDGE) / 2) #define CX_FLOATERSHOWN (BRAND_WIDTH + CLOSEMIN_WIDTH + (2 * CLOSEMIN_XOFFSET)) #define SHORT_DELAY 90 #define LONG_DELAY (4 * SHORT_DELAY) // Theatre mode controls #define TMC_PROGRESSBAR 1 #define TMC_BRANDBAND 2 #define TMC_STATUSBAR 3 #define TM_STATUS_PANES 2 #define TM_STATUS_PANE_NAVIGATION 0 #define TM_STATUS_PANE_SSL 1 class CShellBrowser2; class CTheater: public IOleWindow, public IOleCommandTarget, public IServiceProvider { public: HWND GetMasterWindow() {return _hwndBrowser;}; void Begin(); CTheater(HWND hwnd, HWND hwndToolbar, IUnknown *punkOwner); ~CTheater(); // *** IUnknown *** virtual STDMETHODIMP QueryInterface(REFIID riid, void **ppvObj); virtual STDMETHODIMP_(ULONG) AddRef(void); virtual STDMETHODIMP_(ULONG) Release(void); // *** IOleWindow methods *** virtual STDMETHODIMP GetWindow(HWND * lphwnd); virtual STDMETHODIMP ContextSensitiveHelp(BOOL fEnterMode) { return E_NOTIMPL; } // IOleCommandTarget virtual STDMETHODIMP QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD rgCmds[], OLECMDTEXT *pcmdtext); virtual STDMETHODIMP Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANTARG *pvarargIn, VARIANTARG *pvarargOut); // *** IServiceProvider methods *** virtual STDMETHODIMP QueryService(REFGUID guidService, REFIID riid, void **ppvObj); HRESULT SetBrowserBar(IUnknown* punk, int cxHidden, int cxExpanded); void GetPreviousWindowPlacement(WINDOWPLACEMENT* pwp, LPRECT prc) { *pwp = _wp; *prc = _rcOld;}; void SetAutoHideToolbar(long val) { _fAutoHideToolbar = val; }; void RecalcSizing(); protected: friend class CShellBrowser2; // save data // we put the save state data in here so that the browser doesn't have to waste memory with this data when not in theater mode // also, because it's transient, don't use bitfields. save code instead of memory for transient stuff private: int _cyLast; HWND _hwndToolbar; // this is the toolbar window that we want to make sure the hidden window encompasses HWND _hwndBrowser; // this is the hwnd that we slide down HWND _hwndTaskbar; BOOL _fShown; BOOL _fTaskbarShown; BOOL _fDelay; BOOL _fAutoHideToolbar; BOOL _fInitialBrowserBar; BOOL _fAutoHideBrowserBar; HHOOK _hhook; IUnknown *_punkOwner; IUnknown *_punkBrowBar; HWND _hwndBrowBar; WINDOWPLACEMENT _wp; RECT _rcOld; UINT _cRef; IDeskBand* _pdbBrand; HWND _hwndClose; HWND _hwndFloater; // the Floating pallete window HWND _hwndProgress; // used in CShellBrowser(2) - maybe move to interface int _cActiveRef; // the ref count for activating the Floatering palette static CAssociationList _al; // associate threadid with CTheater objects void _SwapParents(HWND hwndOld, HWND hwndNew); void _Initialize(); void _SizeBrowser(); void _SizeFloater(); void _CreateCloseMinimize(); void _PositionCloseRestore(); void _DelayHideFloater(); void _DelayHideToolbar(); void _HideToolbar(); void _ShowToolbar(); void _ContinueHideToolbar(); LRESULT _OnMsgHook(int nCode, WPARAM wParam, MOUSEHOOKSTRUCT *pmhs, BOOL fFake); BOOL _IsBrowserActive(); void _ShowTaskbar(); void _HideTaskbar(); void _Unhide(int iWhich, UINT uDelay); int _iUnhidee; BOOL _PtNearWindow(POINT pt, HWND hwnd); BOOL _PtOnEdge(POINT pt, int iEdge); BOOL _GetWindowRectRel(HWND hWnd, LPRECT lpRect); BOOL_PTR _HasBegun() { return (BOOL_PTR)_hhook; } BOOL _fBrowBarShown; int _cxBrowBarShown; int _cxBrowBarHidden; void _ContinueHideBrowBar(); void _HideBrowBar(); void _ShowBrowBar(); BOOL _CanHideWindow(HWND hwnd); BOOL _fFloaterShown; COLORREF _clrBrandBk; void _ContinueHideFloater(); void _HideFloater(); void _ShowFloater(); void _SanityCheckZorder(); void _OnCommand(UINT idCmd); static LRESULT _MsgHook(int nCode, WPARAM wParam, LPARAM lParam); static LRESULT _FloaterWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); }; #define THID_ACTIVATE 1 #define THID_DEACTIVATE 2 #define THID_SETBROWSERBARWIDTH 3 // tells the browser bar what it's fixed width should be #define THID_SETTOOLBARAUTOHIDE 4 #define THID_SETBROWSERBARAUTOHIDE 5 #define THID_TOOLBARACTIVATED 6 #define THID_ONINTERNET 7 #define THID_RECALCSIZING 8 // Explorer bar registry save structure typedef struct _BROWBARSAVE { UINT uiWidthOrHeight; BOOL fAutoHide : 1; } BROWBARSAVE; #define SZ_REGVALUE_EXPLORERBARA "ExplorerBar" #define SZ_REGVALUE_EXPLORERBAR TEXT(SZ_REGVALUE_EXPLORERBARA) #endif