///////////////////////////////////////////////////////////////////////////// // Copyright (C) 1993-1998 Microsoft Corporation. All Rights Reserved. // // MODULE: outbar.h // // PURPOSE: Defines the class that implements the Outlook Bar // #pragma once interface IAthenaBrowser; interface INotify; typedef struct tagFOLDERNOTIFY FOLDERNOTIFY; class CDropTarget; ///////////////////////////////////////////////////////////////////////////// // // Types // #define OUTLOOK_BAR_VERSION 0x0001 #define OUTLOOK_BAR_NEWSONLY_VERSION 0X0001 typedef struct tagBAR_PERSIST_INFO { DWORD dwVersion; DWORD cxWidth; BOOL fSmall; DWORD cItems; FILETIME ftSaved; FOLDERID rgFolders[1]; } BAR_PERSIST_INFO; HRESULT OutlookBar_AddShortcut(FOLDERID idFolder); ///////////////////////////////////////////////////////////////////////////// // class COutBar // class COutBar : public IDockingWindow, public IObjectWithSite, public IOleCommandTarget, public IDropTarget, public IDropSource, public IDatabaseNotify { public: ///////////////////////////////////////////////////////////////////////// // Construction and Initialization // COutBar(); ~COutBar(); HRESULT HrInit(LPSHELLFOLDER psf, IAthenaBrowser *psb); ///////////////////////////////////////////////////////////////////////// // IUnknown // STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppvObj); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); ///////////////////////////////////////////////////////////////////////// // IOleWindow // STDMETHODIMP GetWindow(HWND * lphwnd); STDMETHODIMP ContextSensitiveHelp(BOOL fEnterMode); ///////////////////////////////////////////////////////////////////////// // IDockingWindow // STDMETHODIMP ShowDW(BOOL fShow); STDMETHODIMP CloseDW(DWORD dwReserved); STDMETHODIMP ResizeBorderDW(LPCRECT prcBorder, IUnknown* punkToolbarSite, BOOL fReserved); ///////////////////////////////////////////////////////////////////////// // IObjectWithSite // STDMETHODIMP SetSite(IUnknown* punkSite); STDMETHODIMP GetSite(REFIID riid, LPVOID * ppvSite); ///////////////////////////////////////////////////////////////////////// // IOleCommandTarget // STDMETHODIMP QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText); STDMETHODIMP Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut); ///////////////////////////////////////////////////////////////////////// // IDropTarget // STDMETHODIMP DragEnter(IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect); STDMETHODIMP DragOver(DWORD grfKeyState, POINTL pt, DWORD* pdwEffect); STDMETHODIMP DragLeave(void); STDMETHODIMP Drop(IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect); ///////////////////////////////////////////////////////////////////////// // IDropSource // STDMETHODIMP QueryContinueDrag(BOOL fEscapePressed, DWORD grfKeyState); STDMETHODIMP GiveFeedback(DWORD dwEffect); ///////////////////////////////////////////////////////////////////////// // IDatabaseNotify // STDMETHODIMP OnTransaction(HTRANSACTION hTransaction, DWORD_PTR dwCookie, IDatabase *pDB); //News only mode static LPCTSTR GetRegKey(); static DWORD GetOutlookBarVersion(); ///////////////////////////////////////////////////////////////////////// // Window Procedure Goo // protected: static LRESULT CALLBACK OutBarWndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp); static LRESULT CALLBACK ExtFrameWndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp); LRESULT WndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp); LRESULT FrameWndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp); // Main window Handlers void OnDestroy(HWND hwnd); void OnLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags); void OnMouseMove(HWND hwnd, int x, int y, UINT keyFlags); void OnLButtonUp(HWND hwnd, int x, int y, UINT keyFlags); // Frame Window void Frame_OnNCDestroy(HWND hwnd); void Frame_OnSize(HWND hwnd, UINT state, int cx, int cy); void Frame_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify); LRESULT Frame_OnNotify(HWND hwnd, int idFrom, NMHDR *pnmhdr); ///////////////////////////////////////////////////////////////////////// // Utility Functions // HRESULT _CreateToolbar(); void _FillToolbar(); void _EmptyToolbar(BOOL fDelete); BOOL _FindButton(int *piBtn, LPITEMIDLIST pidl); BOOL _InsertButton(int iBtn, FOLDERINFO *pInfo); BOOL _InsertButton(int iBtn, FOLDERID id); BOOL _DeleteButton(int iBtn); BOOL _UpdateButton(int iBtn, LPITEMIDLIST pidl); void _OnFolderNotify(FOLDERNOTIFY *pnotify); void _OnContextMenu(int x, int y); HRESULT _CreateDefaultButtons(void); HRESULT _LoadSettings(void); HRESULT _SaveSettings(void); BOOL _SetButtonStyle(BOOL fSmall); HRESULT _AddShortcut(IDataObject *pObject); void _UpdateDragDropHilite(LPPOINT ppt); int _GetItemFromPoint(POINT pt); FOLDERID _FolderIdFromCmd(int idCmd); BOOL _IsTempNewsgroup(IDataObject *pDataObject); ///////////////////////////////////////////////////////////////////////// // Member Variables // protected: ULONG m_cRef; // Reference Count // Groovy window handles HWND m_hwndParent; // Parent window handle HWND m_hwnd; // Main window handle HWND m_hwndFrame; // Inner window handle HWND m_hwndPager; // Pager window handle HWND m_hwndTools; // Toolbar window handle // Lovely interface pointers IAthenaBrowser *m_pBrowser; // Browser pointer IDockingWindowSite *m_ptbSite; // Site pointer INotify *m_pStNotify; // Notification interface INotify *m_pOutBarNotify; // Outlook Bar notification interface // State BOOL m_fShow; // TRUE if we're visible BOOL m_fLarge; // TRUE if we're showing large icons BOOL m_fResizing; // TRUE if we're in the process of resizing int m_idCommand; // Number of buttons on the button bar int m_idSel; // ID of the item that is selected when a context menu is visible. int m_cxWidth; // Width of our window BOOL m_fOnce; // TRUE until we call _LoadSettings the first time // Images HIMAGELIST m_himlLarge; // Large folder image list HIMAGELIST m_himlSmall; // Small folder image list // Drag Drop Stuff IDataObject *m_pDataObject; // What's being dragged over us DWORD m_grfKeyState; // Keyboard state last time we checked DWORD m_dwEffectCur; // Current drop effect DWORD m_idCur; // Currently selected button CDropTarget *m_pTargetCur; // Current drop target pointer DWORD m_idDropHilite; // Currently selected drop area TBINSERTMARK m_tbim; BOOL m_fInsertMark; // TRUE if we've drawn an insertion mark BOOL m_fDropShortcut; // TRUE if the data object over us contains CF_OEFOLDER };