///////////////////////////////////////////////////////////////////////////// // Copyright (C) 1993-1996 Microsoft Corporation. All Rights Reserved. // // MODULE: navpane.h // // PURPOSE: Defines CNavPane class // #pragma once ///////////////////////////////////////////////////////////////////////////// // Forward Dec's // class CTreeView; interface IMsgrAb; interface IAthenaBrowser; class CPaneFrame; class CNavPane : public IDockingWindow, public IObjectWithSite, public IOleCommandTarget, public IInputObjectSite, public IInputObject { public: ///////////////////////////////////////////////////////////////////////// // Construction and Initialization // CNavPane(); ~CNavPane(); HRESULT Initialize(CTreeView *pTreeView); BOOL IsTreeVisible() { return m_fTreeVisible; } BOOL ShowFolderList(BOOL fShow); BOOL ShowContacts(BOOL fShow); BOOL IsContactsFocus(); ///////////////////////////////////////////////////////////////////////// // IUnknown // STDMETHODIMP QueryInterface(THIS_ REFIID riid, LPVOID *ppvObj); STDMETHOD_(ULONG, AddRef)(THIS); STDMETHOD_(ULONG, Release)(THIS); ///////////////////////////////////////////////////////////////////////// // IOleWindow // STDMETHODIMP GetWindow(HWND* lphwnd); STDMETHODIMP ContextSensitiveHelp(BOOL fEnterMode); ///////////////////////////////////////////////////////////////////////// // IDockingWindow // STDMETHODIMP ShowDW(BOOL fShow); STDMETHODIMP ResizeBorderDW(LPCRECT prcBorder, IUnknown* punkToolbarSite, BOOL fReserved); STDMETHODIMP CloseDW(DWORD dwReserved); ///////////////////////////////////////////////////////////////////////// // IObjectWithSite // STDMETHODIMP GetSite(REFIID riid, LPVOID *ppvSite); STDMETHODIMP SetSite(IUnknown *pUnkSite); ///////////////////////////////////////////////////////////////////////// // 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); ///////////////////////////////////////////////////////////////////////// // IInputObjectSite // STDMETHODIMP OnFocusChangeIS(IUnknown* punkSrc, BOOL fSetFocus); ///////////////////////////////////////////////////////////////////////// // IInputObject // STDMETHODIMP UIActivateIO(BOOL fActivate, LPMSG lpMsg); STDMETHODIMP HasFocusIO(void); STDMETHODIMP TranslateAcceleratorIO(LPMSG pMsg); private: ///////////////////////////////////////////////////////////////////////// // Window Proc Goo // static LRESULT CALLBACK _WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); LRESULT CALLBACK _NavWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); void _OnSize(HWND hwnd, UINT state, int cx, int cy); 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); BOOL _OnSetCursor(HWND hwnd, HWND hwndCursor, UINT codeHitTest, UINT msg); UINT _OnNCHitTest(HWND hwnd, int x, int y); ///////////////////////////////////////////////////////////////////////// // Utility stuff // HRESULT _CreateChildWindows(void); void _UpdateVisibleState(void); private: ///////////////////////////////////////////////////////////////////////// // Member Data // // All kinds of state ULONG m_cRef; // Ref count BOOL m_fShow; // TRUE if we're visible BOOL m_fTreeVisible; // TRUE if the treeview is visible BOOL m_fContactsVisible; // TRUE if contacts are visible // Groovy window handles HWND m_hwnd; // Our window handle HWND m_hwndParent; // Our parent's window handle HWND m_hwndTree; // The folder list window handle HWND m_hwndContacts; // The contacts control window // Interfaces you only wish you could have IDockingWindowSite *m_pSite; // Our site CTreeView *m_pTreeView; // Folder list pointer IMsgrAb *m_pContacts; // Contacts control IOleCommandTarget *m_pContactsTarget; // Command target for contacts CPaneFrame *m_pContactsFrame; // Contacts control frame // Sizing information int m_cxWidth; // How wide our outer window is BOOL m_fResizing; // TRUE if we're in the process of resizing BOOL m_fSplitting; // TRUE if we're splitting int m_cySplitPct; // Split percentage between the two panes RECT m_rcSplit; // Rectangle of the split bar in screen coordinates RECT m_rcSizeBorder; // Rectangle of the right hand sizing bar int m_cyTitleBar; // Height of the pane's title bar }; class CPaneFrame : IInputObjectSite { public: ///////////////////////////////////////////////////////////////////////// // Construction and Initialization // CPaneFrame(); ~CPaneFrame(); HWND Initialize(HWND hwndParent, IInputObjectSite *pSite, int idsTitle, int idMenu = 0); BOOL SetChild(HWND hwndChild, DWORD dwDispId, IAthenaBrowser *pBrowser, IObjectWithSite *pObject, IOleCommandTarget *pTarget = 0); void ShowMenu(void); ///////////////////////////////////////////////////////////////////////// // IUnknown // STDMETHODIMP QueryInterface(THIS_ REFIID riid, LPVOID *ppvObj); STDMETHOD_(ULONG, AddRef)(THIS); STDMETHOD_(ULONG, Release)(THIS); ///////////////////////////////////////////////////////////////////////// // IInputObjectSite // STDMETHODIMP OnFocusChangeIS(IUnknown* punkSrc, BOOL fSetFocus); private: ///////////////////////////////////////////////////////////////////////// // Window Proc Goo // static LRESULT CALLBACK _WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); LRESULT CALLBACK _FrameWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); BOOL _OnCreate(HWND hwnd, LPCREATESTRUCT lpCreateStruct); void _OnSize(HWND hwnd, UINT state, int cx, int cy); void _OnPaint(HWND hwnd); void _OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify); void _OnToggleClosePin(HWND hwnd, BOOL fPin); void _OnLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags); void _OnMouseMove(HWND hwnd, int x, int y, UINT keyFlags); void _OnTimer(HWND hwnd, UINT id); void _UpdateDrawingInfo(void); void _CreateCloseToolbar(); void _SizeCloseToolbar(); void _PositionToolbar(LPPOINT pt); private: ///////////////////////////////////////////////////////////////////////// // Member Data // ULONG m_cRef; // Groovy Window Handles HWND m_hwnd; HWND m_hwndChild; HWND m_hwndParent; // Child info IAthenaBrowser *m_pBrowser; DWORD m_dwDispId; IOleCommandTarget *m_pTarget; int m_idMenu; IInputObjectSite *m_pSite; // Drawing Info TCHAR m_szTitle[CCHMAX_STRINGRES]; HFONT m_hFont; HBRUSH m_hbr3DFace; UINT m_cyTitleBar; RECT m_rcChild; RECT m_rcTitleButton; BOOL m_fHighlightIndicator; BOOL m_fHighlightPressed; // Toolbar Info HWND m_hwndClose; DWORD m_cButtons; BOOL m_fPin; };