UIStatusBar.h
上传用户:yatsl7111
上传日期:2007-01-08
资源大小:1433k
文件大小:8k
源码类别:

图形图象

开发平台:

Visual C++

  1. //*******************************************************************************
  2. // COPYRIGHT NOTES
  3. // ---------------
  4. // You may use this source code, compile or redistribute it as part of your application 
  5. // for free. You cannot redistribute it as a part of a software development 
  6. // library without the agreement of the author. If the sources are 
  7. // distributed along with the application, you should leave the original 
  8. // copyright notes in the source code without any changes.
  9. // This code can be used WITHOUT ANY WARRANTIES at your own risk.
  10. // 
  11. // For the latest updates to this code, check this site:
  12. // http://www.masmex.com 
  13. // after Sept 2000
  14. // 
  15. // Copyright(C) 2000 Philip Oldaker <email: philip@masmex.com>
  16. //*******************************************************************************
  17. #ifndef __STATUSBAROPTIONS_H__
  18. #define __STATUSBAROPTIONS_H__
  19. // CStatusBarPane holds the information required for each pane
  20. // if m_bActive is false the pane will not be shown
  21. typedef CList<int,int> CListImages;
  22. class CStatusBarPane : public CObject
  23. {
  24. DECLARE_SERIAL(CStatusBarPane)
  25. public:
  26. CStatusBarPane();
  27. CStatusBarPane(UINT nID,BOOL bActive);
  28. CStatusBarPane(const CStatusBarPane &rOther);
  29. virtual ~CStatusBarPane();
  30. BOOL IsPaneActive() const;
  31. UINT GetCommandID() const;
  32. UINT GetStyle() const;
  33. void SetPaneActive(BOOL bActive);
  34. void AddImage(int nIndex);
  35. void SetStyle(UINT nStyle);
  36. void RemoveImage(int nIndex);
  37. bool FindImage(int nIndex);
  38. void RemoveAllImages();
  39. CListImages &GetImageIndex();
  40. CStatusBarPane &operator=(const CStatusBarPane &rOther);
  41. // Overrides
  42. virtual void Serialize(CArchive &ar);
  43. private:
  44. void DoCopy(const CStatusBarPane &rOther);
  45. private:
  46. UINT m_nID;
  47. UINT m_nStyle;
  48. BOOL m_bActive;
  49. // Icons
  50. CListImages m_listImageIndex;
  51. };
  52. inline CStatusBarPane::CStatusBarPane()
  53. {
  54. }
  55. inline CStatusBarPane::CStatusBarPane(UINT nID,BOOL bActive) 
  56. : m_nID(nID), 
  57. m_bActive(bActive)
  58. {
  59. m_nStyle = SBPS_NORMAL;
  60. }
  61. inline CStatusBarPane::~CStatusBarPane()
  62. {
  63. }
  64. inline void CStatusBarPane::SetStyle(UINT nStyle)
  65. {
  66. m_nStyle = nStyle;
  67. }
  68. inline UINT CStatusBarPane::GetStyle() const
  69. {
  70. return m_nStyle;
  71. }
  72. inline void CStatusBarPane::SetPaneActive(BOOL bActive)
  73. {
  74. m_bActive = bActive;
  75. }
  76. inline bool CStatusBarPane::FindImage(int nIndex)
  77. {
  78. return m_listImageIndex.Find(nIndex) != NULL;
  79. }
  80. // index into an ImageList
  81. inline void CStatusBarPane::AddImage(int nIndex)
  82. {
  83. m_listImageIndex.AddHead(nIndex);
  84. }
  85. inline void CStatusBarPane::RemoveAllImages()
  86. {
  87. m_listImageIndex.RemoveAll();
  88. }
  89. inline void CStatusBarPane::RemoveImage(int nIndex)
  90. {
  91. POSITION pos = m_listImageIndex.Find(nIndex);
  92. if (pos != NULL)
  93. {
  94. m_listImageIndex.RemoveAt(pos);
  95. }
  96. }
  97. inline CListImages &CStatusBarPane::GetImageIndex()
  98. {
  99. return m_listImageIndex;
  100. }
  101. inline BOOL CStatusBarPane::IsPaneActive() const
  102. {
  103. return m_bActive;
  104. }
  105. inline UINT CStatusBarPane::GetCommandID() const
  106. {
  107. return m_nID;
  108. }
  109. // A configurable status bar that will show its own popup menu to configure it.
  110. // You initially add all the panes and then by using the popup menu you can show or
  111. // hide individual panes. The state can be saved to the registry. 
  112. class CTRL_EXT_CLASS CUIStatusBar : public CStatusBar
  113. {
  114. DECLARE_SERIAL(CUIStatusBar)
  115. public:
  116. // Construction
  117. CUIStatusBar();
  118. ~CUIStatusBar();
  119. void Init();
  120. void Reset();
  121. void Load();
  122. void Save();
  123. void AddPane(UINT nID,BOOL bActive);
  124. BOOL IsValidPaneID(UINT nID) const;
  125. BOOL IsPaneActive(UINT nID) const;
  126. CStatusBarPane *GetPane(UINT nPaneID) const;
  127. BOOL SetPanes(BOOL bSave);
  128. int GetPaneIndex(UINT nID) const;
  129. UINT GetPaneID(int nPaneIndex);
  130. UINT GetStyle(UINT nID) const;
  131. void TogglePane(UINT nID);
  132. void SetImageList(UINT nBitmapID);
  133. void SetImageList(CImageList *pImageList);
  134. void CreateImageList();
  135. void AddIcon(UINT nPaneID,UINT nImageID,bool bUpdate=true);
  136. void RemoveIcon(UINT nPaneID,UINT nImageID,bool bUpdate=true);
  137. void SetStyle(UINT nID,UINT nStyle);
  138. void Clear();
  139. void CopyBar(const CUIStatusBar &rOtherBar);
  140. BOOL IsPanes();
  141. void UpdatePane(int nIndex);
  142. void SetText(UINT nPaneID,LPCTSTR szText,bool bUpdate);
  143. void RemoveAllIcons(UINT nPaneID);
  144. // Overrides
  145. virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
  146.     virtual void Serialize(CArchive& ar);
  147. protected:
  148. void RemoveIcon(UINT nImageID,CStatusBarPane *pPane,bool bUpdate);
  149. void AddImageIndex(UINT nPaneID,int nIndex,bool bUpdate);
  150. int AddIcon(UINT nID);
  151. int AddIcon(HICON hIcon);
  152. void SetTextPane(const CStatusBarPane *pPane,LPCTSTR szText,bool bUpdate=true);
  153. public:
  154. // Main Pane
  155. UINT m_nStatusPane1ID;
  156. UINT m_nStatusPane1Style;
  157. INT  m_nStatusPane1Width;
  158. BOOL m_bMenuSelect;
  159. private:
  160. static LPCTSTR szSection;
  161. static LPCTSTR szPaneEntry;
  162. CList<CStatusBarPane*,CStatusBarPane*> m_PaneList;
  163. CImageList *m_pImageList;
  164. //{{AFX_MSG(CUIStatusBar)
  165. afx_msg void OnContextMenu(CWnd *pWnd, CPoint point);
  166. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  167. afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
  168. //}}AFX_MSG
  169. DECLARE_MESSAGE_MAP()
  170. private:
  171. CUIStatusBar &operator=(const CUIStatusBar &rOther);
  172. CMap<UINT,UINT,int,int> m_mapImageIndex;
  173. };
  174. inline BOOL CUIStatusBar::IsPanes()
  175. {
  176. return !m_PaneList.IsEmpty();
  177. }
  178. inline void CUIStatusBar::CopyBar(const CUIStatusBar &rOtherBar)
  179. {
  180. *this = rOtherBar;
  181. }
  182. inline void CUIStatusBar::SetStyle(UINT nID,UINT nStyle)
  183. {
  184. CStatusBarPane *pPane = GetPane(nID);
  185. ASSERT(pPane);
  186. int nIndex = GetPaneIndex(nID);
  187. UINT nOldStyle;
  188. int nWidth;
  189. GetPaneInfo(nIndex,nID,nOldStyle,nWidth);
  190. SetPaneInfo(nIndex,nID,nStyle,nWidth);
  191. pPane->SetStyle(nStyle);
  192. }
  193. inline UINT CUIStatusBar::GetStyle(UINT nID) const
  194. {
  195. const CStatusBarPane *pPane = GetPane(nID);
  196. ASSERT(pPane);
  197. return pPane->GetStyle();
  198. }
  199. inline int CUIStatusBar::GetPaneIndex(UINT nID) const
  200. {
  201. int nIndex = CommandToIndex(nID);
  202. return nIndex;
  203. }
  204. inline BOOL CUIStatusBar::IsPaneActive(UINT nID) const
  205. {
  206. const CStatusBarPane *pPane = GetPane(nID);
  207. ASSERT(pPane);
  208. return pPane ? pPane->IsPaneActive() : FALSE;
  209. }
  210. inline UINT CUIStatusBar::GetPaneID(int nPaneIndex) 
  211. {
  212. UINT nID,nStyle;
  213. int nWidth;
  214. GetPaneInfo(nPaneIndex,nID,nStyle,nWidth);
  215. return nID;
  216. }
  217. inline BOOL CUIStatusBar::IsValidPaneID(UINT nID) const
  218. {
  219. if (nID == ID_SEPARATOR)
  220. return FALSE;
  221. const CStatusBarPane *pPane = GetPane(nID);
  222. return pPane != NULL;
  223. }
  224. /////////////////////////////////////////////////////////////////////////////
  225. // CProgressBar -  status bar progress control
  226. class CTRL_EXT_CLASS CProgressBar : public CProgressCtrl
  227. // Creates a ProgressBar in the status bar
  228. {
  229. public:
  230. CProgressBar();
  231. CProgressBar(int nPaneID, CUIStatusBar *pStatusBar, int MaxValue = 100);
  232. ~CProgressBar();
  233. BOOL Create(int nPaneID, CUIStatusBar *pStatusBar, int MaxValue=100);
  234. DECLARE_DYNCREATE(CProgressBar)
  235. // operations
  236. public:
  237. void SetRange(int nLower, int nUpper, int nStep = 1);
  238. void SetSize(int nSize);
  239. int  SetPos(int nPos);
  240. int  OffsetPos(int nPos);
  241. int  SetStep(int nStep);
  242. int  StepIt();
  243. void Clear();
  244. // Overrides
  245. //{{AFX_VIRTUAL(CProgressBar)
  246. //}}AFX_VIRTUAL
  247. // implementation
  248. protected:
  249. void Resize();
  250. // Generated message map functions
  251. protected:
  252. //{{AFX_MSG(CProgressBar)
  253. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  254. //}}AFX_MSG
  255. DECLARE_MESSAGE_MAP()
  256. private:
  257. CUIStatusBar *m_pStatusBar;
  258. int m_nPaneIndex;
  259. };
  260. inline void CProgressBar::SetSize(int nSize)
  261. Resize(); 
  262. }
  263. #endif