⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uistatusbar.h

📁 vc座的资源管理器源代码
💻 H
字号:
//*******************************************************************************
// COPYRIGHT NOTES
// ---------------
// You may use this source code, compile or redistribute it as part of your application 
// for free. You cannot redistribute it as a part of a software development 
// library without the agreement of the author. If the sources are 
// distributed along with the application, you should leave the original 
// copyright notes in the source code without any changes.
// This code can be used WITHOUT ANY WARRANTIES at your own risk.
// 
// For the latest updates to this code, check this site:
// http://www.masmex.com 
// after Sept 2000
// 
// Copyright(C) 2000 Philip Oldaker <email: philip@masmex.com>
//*******************************************************************************

#ifndef __STATUSBAROPTIONS_H__
#define __STATUSBAROPTIONS_H__

// CStatusBarPane holds the information required for each pane
// if m_bActive is false the pane will not be shown
typedef CList<int,int> CListImages;

class CStatusBarPane : public CObject
{
	DECLARE_SERIAL(CStatusBarPane)
public:

	CStatusBarPane();
	CStatusBarPane(UINT nID,BOOL bActive);
	CStatusBarPane(const CStatusBarPane &rOther);
	virtual ~CStatusBarPane();

	BOOL IsPaneActive() const;
	UINT GetCommandID() const;
	UINT GetStyle() const;
	void SetPaneActive(BOOL bActive);
	void AddImage(int nIndex);
	void SetStyle(UINT nStyle);
	void RemoveImage(int nIndex);
	bool FindImage(int nIndex);
	void RemoveAllImages();
	CListImages &GetImageIndex();

	CStatusBarPane &operator=(const CStatusBarPane &rOther);
// Overrides
	virtual void Serialize(CArchive &ar);
private:
	void DoCopy(const CStatusBarPane &rOther);

private:
	UINT m_nID;
	UINT m_nStyle;
	BOOL m_bActive;
// Icons
	CListImages m_listImageIndex;
};

inline CStatusBarPane::CStatusBarPane()
{
}

inline CStatusBarPane::CStatusBarPane(UINT nID,BOOL bActive) 
	:	m_nID(nID), 
		m_bActive(bActive)
{
	m_nStyle = SBPS_NORMAL;
}

inline CStatusBarPane::~CStatusBarPane()
{
}

inline void CStatusBarPane::SetStyle(UINT nStyle)
{
	m_nStyle = nStyle;
}

inline UINT CStatusBarPane::GetStyle() const
{
	return m_nStyle;
}

inline void CStatusBarPane::SetPaneActive(BOOL bActive)
{
	m_bActive = bActive;
}

inline bool CStatusBarPane::FindImage(int nIndex)
{
	return m_listImageIndex.Find(nIndex) != NULL;
}

// index into an ImageList
inline void CStatusBarPane::AddImage(int nIndex)
{
	m_listImageIndex.AddHead(nIndex);
}

inline void CStatusBarPane::RemoveAllImages()
{
	m_listImageIndex.RemoveAll();
}

inline void CStatusBarPane::RemoveImage(int nIndex)
{
	POSITION pos = m_listImageIndex.Find(nIndex);
	if (pos != NULL)
	{
		m_listImageIndex.RemoveAt(pos);
	}
}

inline CListImages &CStatusBarPane::GetImageIndex()
{
	return m_listImageIndex;
}

inline	BOOL CStatusBarPane::IsPaneActive() const
{
	return m_bActive;
}

inline	UINT CStatusBarPane::GetCommandID() const
{
	return m_nID;
}

// A configurable status bar that will show its own popup menu to configure it.
// You initially add all the panes and then by using the popup menu you can show or
// hide individual panes. The state can be saved to the registry. 
class CTRL_EXT_CLASS CUIStatusBar : public CStatusBar
{
	DECLARE_SERIAL(CUIStatusBar)
public:
	// Construction
	CUIStatusBar();
	~CUIStatusBar();

	void Init();
	void Reset();
	void Load();
	void Save();
	void AddPane(UINT nID,BOOL bActive);
	BOOL IsValidPaneID(UINT nID) const;
	BOOL IsPaneActive(UINT nID) const;
	CStatusBarPane *GetPane(UINT nPaneID) const;
	BOOL SetPanes(BOOL bSave);
	int GetPaneIndex(UINT nID) const;
	UINT GetPaneID(int nPaneIndex);
	UINT GetStyle(UINT nID) const;
	void TogglePane(UINT nID);
	void SetImageList(UINT nBitmapID);
	void SetImageList(CImageList *pImageList);
	void CreateImageList();
	void AddIcon(UINT nPaneID,UINT nImageID,bool bUpdate=true);
	void RemoveIcon(UINT nPaneID,UINT nImageID,bool bUpdate=true);
	void SetStyle(UINT nID,UINT nStyle);
	void Clear();
	void CopyBar(const CUIStatusBar &rOtherBar);
	BOOL IsPanes();
	void UpdatePane(int nIndex);
	void SetText(UINT nPaneID,LPCTSTR szText,bool bUpdate);
	void RemoveAllIcons(UINT nPaneID);

// Overrides
	virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
    virtual void Serialize(CArchive& ar);
protected:
	void RemoveIcon(UINT nImageID,CStatusBarPane *pPane,bool bUpdate);
	void AddImageIndex(UINT nPaneID,int nIndex,bool bUpdate);
	int AddIcon(UINT nID);
	int AddIcon(HICON hIcon);
	void SetTextPane(const CStatusBarPane *pPane,LPCTSTR szText,bool bUpdate=true);
public:
	// Main Pane
	UINT m_nStatusPane1ID;
	UINT m_nStatusPane1Style;
	INT  m_nStatusPane1Width;
	BOOL m_bMenuSelect;
private:
	static LPCTSTR szSection;
	static LPCTSTR szPaneEntry;
	CList<CStatusBarPane*,CStatusBarPane*> m_PaneList;
	CImageList *m_pImageList;

	//{{AFX_MSG(CUIStatusBar)
	afx_msg void OnContextMenu(CWnd *pWnd, CPoint point);
	afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
	afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
private:
	CUIStatusBar &operator=(const CUIStatusBar &rOther);
	CMap<UINT,UINT,int,int> m_mapImageIndex;
};

inline BOOL CUIStatusBar::IsPanes()
{
	return !m_PaneList.IsEmpty();
}

inline void CUIStatusBar::CopyBar(const CUIStatusBar &rOtherBar)
{
	*this = rOtherBar;
}

inline void CUIStatusBar::SetStyle(UINT nID,UINT nStyle)
{
	CStatusBarPane *pPane = GetPane(nID);
	ASSERT(pPane);
	int nIndex = GetPaneIndex(nID);
	UINT nOldStyle;
	int nWidth;
	GetPaneInfo(nIndex,nID,nOldStyle,nWidth);
	SetPaneInfo(nIndex,nID,nStyle,nWidth);
	pPane->SetStyle(nStyle);
}

inline UINT CUIStatusBar::GetStyle(UINT nID) const
{
	const CStatusBarPane *pPane = GetPane(nID);
	ASSERT(pPane);
	return pPane->GetStyle();
}

inline int CUIStatusBar::GetPaneIndex(UINT nID) const
{
	int nIndex = CommandToIndex(nID);
	return nIndex;
}

inline	BOOL CUIStatusBar::IsPaneActive(UINT nID) const
{
	const CStatusBarPane *pPane = GetPane(nID);
	ASSERT(pPane);
	return pPane ? pPane->IsPaneActive() : FALSE;
}

inline UINT CUIStatusBar::GetPaneID(int nPaneIndex) 
{
	UINT nID,nStyle;
	int nWidth;
	GetPaneInfo(nPaneIndex,nID,nStyle,nWidth);
	return nID;
}

inline BOOL CUIStatusBar::IsValidPaneID(UINT nID) const
{
	if (nID == ID_SEPARATOR)
		return FALSE;
	const CStatusBarPane *pPane = GetPane(nID);
	return pPane != NULL;
}

/////////////////////////////////////////////////////////////////////////////
// CProgressBar -  status bar progress control
	
class CTRL_EXT_CLASS CProgressBar : public CProgressCtrl
// Creates a ProgressBar in the status bar
{
public:
	CProgressBar();
	CProgressBar(int nPaneID, CUIStatusBar *pStatusBar, int MaxValue = 100);
	~CProgressBar();
	BOOL Create(int nPaneID, CUIStatusBar *pStatusBar, int MaxValue=100);

	DECLARE_DYNCREATE(CProgressBar)

// operations
public:

	void SetRange(int nLower, int nUpper, int nStep = 1);
	void SetSize(int nSize);
	int  SetPos(int nPos);
	int  OffsetPos(int nPos);
	int  SetStep(int nStep);
	int  StepIt();
	void Clear();

// Overrides
	//{{AFX_VIRTUAL(CProgressBar)
	//}}AFX_VIRTUAL

// implementation
protected:

	void Resize();

// Generated message map functions
protected:
	//{{AFX_MSG(CProgressBar)
	afx_msg BOOL OnEraseBkgnd(CDC* pDC);
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
private:
	CUIStatusBar *m_pStatusBar;
	int m_nPaneIndex;
};

inline void	CProgressBar::SetSize(int nSize)
{ 
	Resize(); 
}

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -