Windows2003-3790/inetcore/outlookexpress/mailnews/shell/navpane.h
2020-09-30 16:53:55 +02:00

228 lines
8.2 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// 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;
};