|
|
/////////////////////////////////////////////////////////////////////////////
// Copyright (C) 1993-1996 Microsoft Corporation. All Rights Reserved.
//
// MODULE: itbar.h
//
// PURPOSE: Defines the CCoolbar class.
//
/******************************************************
Please do not make any changes to this file. Instead add the changes to tbbands.cpp and tbbands.h. This file will be deleted from the project soon. ******************************************************/
#ifndef __ITBAR_H__
#define __ITBAR_H__
#include "conman.h"
#include "mbcallbk.h"
typedef struct tagTOOLBARARRAYINFO TOOLBARARRAYINFO;
#define SIZABLECLASS TEXT("SizableRebar")
// Length of the text under each quick links and toolbar buttton
#define MAX_QL_TEXT_LENGTH 256
#define BAND_NAME_LEN 32
// Number of Sites on the quick link bar and max number of toolbar buttons
#define MAX_TB_BUTTONS 10
/*
// Indicies for the Coolbar bar
#define CBTYPE_NONE 0
#define CBTYPE_BRAND 1
#define CBTYPE_TOOLS 2
#define CBTYPE_MENUBAND 3
#define CBANDS 3
*/ #define CBANDS 3
// Identify the sides of the window
typedef enum { COOLBAR_TOP = 0, COOLBAR_LEFT, COOLBAR_BOTTOM, COOLBAR_RIGHT, COOLBAR_SIDEMAX } COOLBAR_SIDE;
#define VERTICAL(side) (BOOL)(((side) == COOLBAR_LEFT) || ((side) == COOLBAR_RIGHT))
#define COOLBAR_VERSION 0x03
#define MAX_TB_COMPRESSED_WIDTH 42
#define MAX_TB_TEXT_ROWS_VERT 2
#define MAX_TB_TEXT_ROWS_HORZ 1
// Dimensions of Coolbar Glyphs ..
#define TB_BMP_CX_W2K 22
#define TB_BMP_CX 24
#define TB_BMP_CY 24
#define TB_SMBMP_CX 16
#define TB_SMBMP_CY 16
// Max length of Button titles
#define MAX_TB_TEXT_LENGTH 256
// Indices for Toolbar imagelists
enum { IMLIST_DEFAULT = 0, IMLIST_HOT, CIMLISTS };
void InitToolbar(const HWND hwnd, const int cHiml, HIMAGELIST *phiml, UINT nBtns, const TBBUTTON *ptbb, const TCHAR *pStrings, const int cxImg, const int cyImg, const int cxMax, const int idBmp, const BOOL fCompressed, const BOOL fVertical); void LoadGlyphs(const HWND hwnd, const int cHiml, HIMAGELIST *phiml, const int cx, const int idBmp); BOOL LoadToolNames(const UINT *rgIds, const UINT cIds, LPTSTR szTools);
// These are the various states the coolbar can have
#define CBSTATE_HIDDEN 0x00000001
#define CBSTATE_COMPRESSED 0x00000002
#define CBSTATE_NOBACKGROUND 0x00000004
#define CBSTATE_ANIMATING 0x00000008
#define CBSTATE_COLORBUTTONS 0x00000010
#define CBSTATE_INMENULOOP 0x00000020
#define CBSTATE_FIRSTFRAME 0x00000040
// BANDSAVE & - These structures are used to persist the state of the coolbar
// COOLBARSAVE including the band order, visiblity, size, side, etc.
typedef struct tagBANDSAVE { DWORD wID; DWORD dwStyle; DWORD cx; } BANDSAVE, *PBANDSAVE;
typedef struct tagCOOLBARSAVE { DWORD dwVersion; DWORD dwState; COOLBAR_SIDE csSide; BANDSAVE bs[CBANDS]; } COOLBARSAVE, *PCOOLBARSAVE; // These structs are used for the CCoolbar::Invoke() member. They allow
// the caller to specify more information for particular commands.
typedef struct tagCOOLBARSTATECHANGE { UINT id; BOOL fEnable; } COOLBARSTATECHANGE, *LPCOOLBARSTATECHANGE;
typedef struct tagCOOLBARBITMAPCHANGE { UINT id; UINT index; } COOLBARBITMAPCHANGE;
typedef struct tagUPDATEFOLDERNAME { LPTSTR pszServer; LPTSTR pszGroup; } UPDATEFOLDERNAME, *LPUPDATEFOLDERNAME;
typedef struct tagTOOLMESSAGE { UINT uMsg; WPARAM wParam; LPARAM lParam; LRESULT lResult; } TOOLMESSAGE;
void SendSaveRestoreMessage(HWND hwnd, const TOOLBARARRAYINFO *ptai, BOOL fSave);
class CCoolbar : public IDockingWindow, public IObjectWithSite, public IConnectionNotify { public: /////////////////////////////////////////////////////////////////////////
// Construction and initialization
CCoolbar(); HRESULT HrInit(DWORD idBackground, HMENU hmenu);
protected: virtual ~CCoolbar();
public: virtual STDMETHODIMP QueryInterface(REFIID riid, LPVOID* ppvObj); virtual STDMETHODIMP_(ULONG) AddRef(void); virtual STDMETHODIMP_(ULONG) Release(void);
/////////////////////////////////////////////////////////////////////////
// IDockingWindow methods
virtual STDMETHODIMP GetWindow(HWND * lphwnd); virtual STDMETHODIMP ContextSensitiveHelp(BOOL fEnterMode); virtual STDMETHODIMP ShowDW(BOOL fShow); virtual STDMETHODIMP CloseDW(DWORD dwReserved); virtual STDMETHODIMP ResizeBorderDW(LPCRECT prcBorder, IUnknown* punkToolbarSite, BOOL fReserved);
/////////////////////////////////////////////////////////////////////////
// IObjectWithSite methods
virtual STDMETHODIMP SetSite(IUnknown* punkSite); virtual STDMETHODIMP GetSite(REFIID riid, LPVOID * ppvSite);
/////////////////////////////////////////////////////////////////////////
// IConnectionNotify
virtual STDMETHODIMP OnConnectionNotify(CONNNOTIFY nCode, LPVOID pvData, CConnectionManager *pConMan);
/////////////////////////////////////////////////////////////////////////
// This allows the view to send commands etc. to the toolbar
virtual STDMETHODIMP Invoke(DWORD id, LPVOID pv); HRESULT SetFolderType(FOLDERTYPE ftType);
virtual STDMETHODIMP OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify); virtual STDMETHODIMP OnInitMenuPopup(HMENU hMenu); BOOL GetText(void) { return !IsFlagSet(CBSTATE_COMPRESSED); } COOLBAR_SIDE GetSide(void) { return (m_csSide); } void SetSide(COOLBAR_SIDE csSide); void SetText(BOOL fText);
HRESULT Update(void); HRESULT TranslateMenuMessage(MSG *lpmsg, LRESULT *lpresult); HRESULT IsMenuMessage(MSG *lpmsg); void SetNotRealSite(); BOOL CheckForwardWinEvent(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT* plres);
protected: void StartDownload(); void StopDownload();
/////////////////////////////////////////////////////////////////////////
// Window procedure and message handlers
static LRESULT CALLBACK SizableWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); virtual LRESULT OnNotify(HWND hwnd, LPARAM lparam); virtual void OnContextMenu(HWND hwndFrom, int xPos, int yPos); virtual LRESULT OnDropDown(HWND hwnd, LPNMHDR lpnmh);
LRESULT OnGetButtonInfo(TBNOTIFY* ptbn);
/////////////////////////////////////////////////////////////////////////
// Used for animating the logo to show progress
HRESULT ShowBrand(void); HRESULT LoadBrandingBitmap(void); void DrawBranding(LPDRAWITEMSTRUCT lpdis);
/////////////////////////////////////////////////////////////////////////
// For sizing etc.
BOOL SetMinDimensions(void); BOOL CompressBands(BOOL fCompress); void TrackSlidingX(int x); void TrackSlidingY(int y); BOOL ChangeOrientation();
/////////////////////////////////////////////////////////////////////////
// Initialization and persistance
HRESULT CreateRebar(BOOL); void SaveSettings(void); /////////////////////////////////////////////////////////////////////////
// Toolbar Stuff
HRESULT AddTools(PBANDSAVE pbs); void InitToolbar(); void UpdateToolbarColors(void); void _UpdateWorkOffline(DWORD cmdf);
HRESULT CreateMenuBand(PBANDSAVE pbs); HRESULT AddMenuBand(PBANDSAVE pbs);
void HideToolbar(DWORD dwBandID); void HandleCoolbarPopup(UINT xPos, UINT yPos);
/////////////////////////////////////////////////////////////////////////
// Misc. stuff
UINT m_cRef; // Ref count
IDockingWindowSite *m_ptbSite; LONG m_cxMaxButtonWidth; FOLDERTYPE m_ftType; const TOOLBARARRAYINFO *m_ptai; BOOL m_fSmallIcons; /////////////////////////////////////////////////////////////////////////
// Handy window handles to have around
HWND m_hwndParent; HWND m_hwndTools; HWND m_hwndBrand; HWND m_hwndSizer; HWND m_hwndRebar;
/////////////////////////////////////////////////////////////////////////
// State variables
COOLBARSAVE m_cbsSavedInfo; COOLBAR_SIDE m_csSide; DWORD m_dwState;
/////////////////////////////////////////////////////////////////////////
// GDI Resources
UINT m_idbBack; // Id of the background bitmap. Set by the subclasses.
HBITMAP m_hbmBack; // Background bitmap
HBITMAP m_hbmBrand; HIMAGELIST m_rghimlTools[CIMLISTS]; // These are for the default toolbar
/////////////////////////////////////////////////////////////////////////
// Used for animating the logo etc
HPALETTE m_hpal; HDC m_hdc; int m_xOrg; int m_yOrg; int m_cxBmp; int m_cyBmp; int m_cxBrand; int m_cyBrand; int m_cxBrandExtent; int m_cyBrandExtent; int m_cyBrandLeadIn; COLORREF m_rgbUpperLeft;
/////////////////////////////////////////////////////////////////////////
// Used in resizing etc
int m_xCapture; int m_yCapture;
//Used by Menubands
IShellMenu *m_pShellMenu; IDeskBand *m_pDeskBand; IMenuBand *m_pMenuBand; HMENU m_hMenu; CMenuCallback *m_mbCallback; IWinEventHandler *m_pWinEvent; HWND m_hwndMenuBand; };
// DOUTL levels
#define DM_TBSITE 0
#define DM_TBCMD 0
#define DM_TBREF TF_SHDREF
#define DM_LAYOUT 0
#define FCIDM_BRANDING 12345
#define ANIMATION_TIMER 123
#define ANIMATION_DELTA_X 25
#define ANIMATION_DELTA_Y 5
// flags for _dwURLChangeFlags
#define URLCHANGED_TYPED 0x0001
#define URLCHANGED_SELECTEDFROMCOMBO 0x0002
#define idDownloadBegin 100
#define idDownloadEnd 101
#define idStateChange 102
#define idUpdateFolderList 103
#define idUpdateCurrentFolder 104
#define idSendToolMessage 105
#define idBitmapChange 106
#define idToggleButton 107
#define idCustomize 108
// Child window id's
#define idcCoolbarBase 2000
#define idcSizer (idcCoolbarBase - 2)
#define idcCoolbar (idcCoolbarBase - 1)
#define idcToolbar (idcCoolbarBase + CBTYPE_TOOLS)
#define idcBrand (idcCoolbarBase + CBTYPE_BRAND)
// Coolbar drawing states
#define DRAW_NOBACKGROUND 0x1
#define DRAW_COLORBUTTONS 0x2
// Folder switching timer
#define FOLDER_SWITCHTIMER 200
#define FOLDER_SWITCHDELAY 400
#endif // __ITBAR_H__
|