www.pudn.com > ÍøÂç¶Ë¿Ú¼àÊÓ.rar > BCGPBaseControlBar.h


#if !defined(AFX_BCGPBASECONTROLBAR_H__F0BA3C67_2E4B_43EA_8B4E_AE7DF09B5580__INCLUDED_) 
#define AFX_BCGPBASECONTROLBAR_H__F0BA3C67_2E4B_43EA_8B4E_AE7DF09B5580__INCLUDED_ 
 
#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 
 
//******************************************************************************* 
// COPYRIGHT NOTES 
// --------------- 
// This is a part of the BCGControlBar Library 
// Copyright (C) 1998-2000 BCGSoft Ltd. 
// All rights reserved. 
// 
// This source code can be used, distributed or modified 
// only under terms and conditions  
// of the accompanying license agreement. 
//******************************************************************************* 
// BCGPBaseControlBar.h : header file 
// 
 
#ifndef __AFXTEMPL_H__ 
	#include "afxtempl.h" 
#endif 
 
#ifndef __AFXMT_H__ 
	#include  
#endif 
 
#include "BCGCBPro.h" 
#include "BCGGlobals.h" 
 
#pragma warning( disable : 4100 34 )   
 
class CBCGPSlider; 
class CBCGPMiniFrameWnd; 
class CBCGPDockBar; 
class CBCGPDockBarRow; 
class CBCGPTabbedControlBar; 
class CBCGPBaseTabWnd; 
class CBCGPBaseTabbedBar; 
 
// DM - dock method 
typedef enum BCGP_DOCK_METHOD 
{ 
	DM_UNKNOWN, 
	DM_MOUSE, 
	DM_DBL_CLICK, 
	DM_SHOW, 
	DM_RECT, 
	DM_STANDARD 
}; 
 
// DT - dock type 
typedef enum BCGP_DOCK_TYPES 
{ 
	DT_DOCK_FIRST, 
	DT_DOCK_LAST, 
	DT_DOCK_BEFORE, 
	DT_DOCK_AFTER, 
	DT_DOCK_BY_INDEX 
}; 
 
static const DWORD CBRS_BCGP_FLOAT			= 0x1; 
static const DWORD CBRS_BCGP_AUTOHIDE		= 0x2; 
static const DWORD CBRS_BCGP_RESIZE			= 0x4; 
static const DWORD CBRS_BCGP_CLOSE			= 0x8; 
static const DWORD CBRS_BCGP_AUTO_ROLLUP	= 0x10; 
 
static const DWORD CBRS_BCGP_REGULAR_TABS	= 0x20; 
static const DWORD CBRS_BCGP_OUTLOOK_TABS	= 0x40; 
 
///////////////////////////////////////////////////////////////////////////// 
// CBCGPBaseControlBar window 
 
class BCGCBPRODLLEXPORT CBCGPBaseControlBar : public CWnd 
{ 
	friend class CBCGPDockManager; 
	friend class CBCGPMDIChildWnd; 
 
DECLARE_DYNAMIC(CBCGPBaseControlBar) 
 
// Construction 
public: 
	CBCGPBaseControlBar(); 
 
// Attributes 
public: 
	virtual BOOL IsHorizontal () const; 
	virtual BOOL IsDocked () const; 
	virtual BOOL IsTabbed () const; 
	virtual BOOL IsFloating () const {return !IsDocked ();} 
	virtual BOOL IsResizable () const {return TRUE;} 
	virtual BOOL IsVisible () const; 
	virtual BOOL DoesAllowDynInsertBefore () const {return CanFloat ();} 
	virtual BOOL CanAcceptBar (const CBCGPBaseControlBar* pBar) const; 
	virtual BOOL CanBeDocked (CBCGPBaseControlBar* pDockBar) const {return FALSE;} 
	virtual BOOL CanBeAttached () const {return FALSE;} 
	virtual DWORD GetCurrentAlignment () const {return m_dwStyle & CBRS_ALIGN_ANY;} 
	virtual DWORD GetEnabledAlignment () const {return m_dwEnabledAlignment;} 
	virtual CWnd* GetDockSite () const; 
	virtual CBCGPDockBar* GetParentDockBar () const {return m_pParentDockBar;} 
	virtual int GetCaptionHeight () const {return 0;} 
	virtual BOOL IsFloatingMulti () const {return FALSE;} 
	 
	virtual BOOL GetRecentVisibleState () const {return m_bRecentVisibleState;} 
	virtual BOOL IsRestoredFromRegistry () const {return m_bIsRestoredFromRegistry;} 
	// use when loading from registry was partial (due to exception) to clean the state 
	virtual void SetRestoredFromRegistry (BOOL bState) {m_bIsRestoredFromRegistry = bState;} 
 
	virtual BCGP_DOCK_TYPE GetDockMode () const;  
 
	virtual HICON GetBarIcon (BOOL bBigIcon) {return CWnd::GetIcon (bBigIcon);} 
 
	BOOL IsBarVisible () const 
	{ 
		return ((GetStyle () & WS_VISIBLE) != 0); 
	} 
 
	void SetDockMode (BCGP_DOCK_TYPE dockModeNew) 
	{ 
		m_dockMode = dockModeNew; 
	} 
 
	virtual DWORD GetBarStyle () const {return m_dwStyle;}	 
	virtual DWORD GetBCGStyle () const {return m_dwBCGStyle;}	 
	virtual BOOL CanBeClosed () const { return m_dwBCGStyle & CBRS_BCGP_CLOSE; } 
	virtual BOOL CanFloat () const; 
	virtual BOOL CanBeResized () const { return m_dwBCGStyle & CBRS_BCGP_RESIZE; } 
	virtual BOOL CanAutoHide () const {return m_dwBCGStyle & CBRS_BCGP_AUTOHIDE; } 
 
	CBCGPDockBarRow* GetDockRow () {return m_pDockBarRow;} 
 
	static BOOL m_bSetTooltipTopmost; 
 
	static BOOL IsTooltipTopmost () 
	{ 
		return m_bSetTooltipTopmost && !globalData.bIsWindows9x && !globalData.bIsWindowsNT4; 
	} 
 
	static BOOL m_bMultiThreaded; 
 
 
 
// Operations 
public: 
	virtual void SetBarAlignment (DWORD dwAlignment)  
	{ 
		m_dwStyle &= ~(CBRS_ALIGN_ANY); 
		m_dwStyle |= dwAlignment; 
	} 
	virtual void SetBarStyle (DWORD dwNewStyle)  
	{ 
		m_dwStyle = dwNewStyle; 
	} 
	virtual void EnableDocking (DWORD dwAlignment)  
	{ 
		m_dwEnabledAlignment = dwAlignment; 
	} 
	virtual void EnableGripper (BOOL bEnable) {} 
	virtual void OnDrawCaption () {} 
	virtual BOOL DockControlBar	(CBCGPBaseControlBar* pDockBar, LPCRECT lpRect,  
								 BCGP_DOCK_METHOD dockMethod)  
	{ 
		return FALSE; 
	} 
	virtual BOOL FloatControlBar	(CRect rectFloat,  
									 BCGP_DOCK_METHOD dockMethod = DM_UNKNOWN,  
									 bool bShow = true)  
	{ 
		return FALSE; 
	} 
 
	virtual BOOL DockToFrameWindow  (DWORD dwAlignment, LPCRECT lpRect = NULL,  
									 DWORD dwDockFlags = DT_DOCK_LAST,  
									 CBCGPBaseControlBar* pRelativeBar = NULL,  
									 int nRelativeIndex = -1,  
									 BOOL bOuterEdge = FALSE)  
	{ 
		return FALSE; 
	} 
	 
	virtual void OnMoveSlider (CBCGPSlider* /*pSlider*/) {} 
	virtual CSize StretchControlBar (int nLength, BOOL bVert)  
	{ 
		return CSize (0, 0); 
	} 
 
	void DockControlBarMap	 (BOOL bUseDockSite); 
 
	virtual void AdjustLayout () {} 
	virtual void RecalcLayout () {} 
 
	virtual CBCGPMiniFrameWnd* CreateDefaultMiniframe (CRect rectInitial) {return NULL;} 
	virtual void OnRemoveFromMiniFrame (CBCGPMiniFrameWnd* pMiniFrame) {} 
 
	virtual void OnBeforeChangeParent (CWnd* pWndNewParent, BOOL bDelay = FALSE) {}  
	virtual void OnAfterChangeParent  (CWnd* pWndOldParent) {} 
 
	virtual void ShowControlBar (BOOL bShow, BOOL bDelay, BOOL bActivate/* = TRUE*/);  
 
	virtual CBCGPMiniFrameWnd* GetParentMiniFrame (BOOL bNoAssert = FALSE) const; 
 
	virtual void Serialize (CArchive& ar); 
	virtual BOOL LoadState (LPCTSTR lpszProfileName = NULL, int nIndex = -1, UINT uiID = (UINT) -1); 
	virtual BOOL SaveState (LPCTSTR lpszProfileName = NULL, int nIndex = -1, UINT uiID = (UINT) -1); 
 
	virtual HDWP MoveWindow (CRect& rect, BOOL bRepaint = TRUE, HDWP hdwp = NULL); 
	virtual HDWP SetWindowPos (const CWnd* pWndInsertAfter, int x, int y, int cx, int cy,  
								UINT nFlags, HDWP hdwp = NULL); 
 
	CBCGPBaseTabWnd* GetParentTabWnd (HWND& hWndTab) const; 
	CBCGPBaseTabbedBar* GetParentTabbedBar () const; 
	virtual void UnDockControlBar (BOOL bDelay = FALSE) {} 
 
	virtual void OnUpdateCmdUI(CFrameWnd* /*pTarget*/, BOOL /*bDisableIfNoHndler*/) {} 
 
	const CRect& GetBarRect () const {return m_rectBar;} 
	void SetBarRect (const CRect& rect) {m_rectBar = rect;} 
	void FillWindowRect () {GetWindowRect (m_rectBar);} 
 
// Overrides 
	// ClassWizard generated virtual function overrides 
	//{{AFX_VIRTUAL(CBCGPBaseControlBar) 
	public: 
	virtual BOOL CreateEx(DWORD dwStyleEx, LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, DWORD dwBCGStyle = 0, CCreateContext* pContext = NULL); 
	virtual BOOL PreTranslateMessage(MSG* pMsg); 
	protected: 
	virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam); 
	//}}AFX_VIRTUAL 
 
	 
	 
// Implementation 
public: 
	virtual ~CBCGPBaseControlBar(); 
 
	virtual CSize CalcFixedLayout(BOOL bStretch, BOOL bHorz) 
	{ 
		CSize size; 
		size.cx = (bStretch && bHorz ? 32767 : 0); 
		size.cy = (bStretch && !bHorz ? 32767 : 0); 
		return size; 
	} 
 
	// Generated message map functions 
protected: 
	virtual void DoPaint(CDC* pDC); 
 
	//{{AFX_MSG(CBCGPBaseControlBar) 
	afx_msg void OnPaint(); 
	afx_msg BOOL OnEraseBkgnd(CDC* pDC); 
	afx_msg void OnSize(UINT nType, int cx, int cy); 
	//}}AFX_MSG 
	afx_msg LRESULT OnIdleUpdateCmdUI(WPARAM wParam, LPARAM); 
	afx_msg LRESULT OnHelpHitTest(WPARAM, LPARAM lParam); 
	afx_msg LRESULT HandleInitDialog(WPARAM, LPARAM); 
	DECLARE_MESSAGE_MAP() 
 
	BOOL		m_bVisible; // use this status instead of IsWindowVisible 
 
	DWORD		m_dwEnabledAlignment; 
	DWORD		m_dwStyle; 
	DWORD		m_dwBCGStyle; 
 
	BOOL		m_bRecentVisibleState; 
	BOOL		m_bIsRestoredFromRegistry; 
 
	CBCGPDockBar*		m_pParentDockBar; 
	CBCGPDockBarRow*	m_pDockBarRow; 
 
	CWnd*				m_pDockSite; 
 
	BCGP_DOCK_TYPE		m_dockMode; 
	BOOL				m_bEnableIDChecking; 
 
	CRect				m_rectBar; 
 
	BOOL				m_bIsDlgControl; 
 
	// Dialog bar-specific: 
	LPTSTR				m_lpszBarTemplateName; 
	CSize				m_sizeDialog; 
 
	static CCriticalSection		g_cs; 
 
public: 
	////------------ for frame mapping --------------------------- 
	void AddControlBar (CBCGPBaseControlBar* pBar); 
	BOOL InsertControlBar	(CBCGPBaseControlBar* pControlBar,  
							 CBCGPBaseControlBar* pTarget, BOOL bAfter = TRUE); 
	void RemoveControlBarFromDockManager (CBCGPBaseControlBar* pBar, BOOL bDestroy = TRUE, 
							BOOL bAdjustLayout = FALSE, BOOL bAutoHide = FALSE); 
	BOOL IsPointNearDockBar (CPoint point, DWORD& dwBarAlignment, BOOL& bOuterEdge) const; 
	CBCGPBaseControlBar* ControlBarFromPoint (CPoint point, int nSensitivity,  
											 bool bExactBar = false,  
											 CRuntimeClass* pRTCBarType = NULL) const; 
	virtual void AdjustDockingLayout (HDWP hdwp = NULL); 
 
	BOOL IsDialogControl () const 
	{ 
		return m_bIsDlgControl; 
	} 
}; 
 
_inline BOOL CBCGPBaseControlBar::IsHorizontal () const 
{ 
	ASSERT_VALID (this); 
	return (GetCurrentAlignment () & CBRS_ORIENT_HORZ); 
} 
 
_inline BOOL CBCGPBaseControlBar::CanAcceptBar (const CBCGPBaseControlBar* /* pBar */) const 
{ 
	return FALSE; 
} 
 
///////////////////////////////////////////////////////////////////////////// 
 
//{{AFX_INSERT_LOCATION}} 
// Microsoft Visual C++ will insert additional declarations immediately before the previous line. 
 
#endif // !defined(AFX_BCGPBASECONTROLBAR_H__F0BA3C67_2E4B_43EA_8B4E_AE7DF09B5580__INCLUDED_)