ExtStatusControlBar.h
上传用户:sesekoo
上传日期:2020-07-18
资源大小:21543k
文件大小:10k
源码类别:

界面编程

开发平台:

Visual C++

  1. // This is part of the Professional User Interface Suite library.
  2. // Copyright (C) 2001-2009 FOSS Software, Inc.
  3. // All rights reserved.
  4. //
  5. // http://www.prof-uis.com
  6. // mailto:support@prof-uis.com
  7. //
  8. // This source code can be used, modified and redistributed
  9. // under the terms of the license agreement that is included
  10. // in the Professional User Interface Suite package.
  11. //
  12. // Warranties and Disclaimers:
  13. // THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND
  14. // INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY,
  15. // FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
  16. // IN NO EVENT WILL FOSS SOFTWARE INC. BE LIABLE FOR ANY DIRECT,
  17. // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES,
  18. // INCLUDING DAMAGES FOR LOSS OF PROFITS, LOSS OR INACCURACY OF DATA,
  19. // INCURRED BY ANY PERSON FROM SUCH PERSON'S USAGE OF THIS SOFTWARE
  20. // EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  21. #if (!defined __EXT_STATUSCONTROLBAR_H)
  22. #define __EXT_STATUSCONTROLBAR_H
  23. #ifndef __EXT_MFC_NO_STATUSBAR
  24. #if (!defined __EXT_MFC_DEF_H)
  25. #include <ExtMfcDef.h>
  26. #endif // __EXT_MFC_DEF_H
  27. #if _MSC_VER > 1000
  28. #pragma once
  29. #endif // _MSC_VER > 1000
  30. class CExtPopupMenuTipWnd;
  31. /////////////////////////////////////////////////////////////////////////////
  32. // CExtStatusControlBar window
  33. class __PROF_UIS_API CExtStatusControlBar
  34. : public CStatusBar
  35. , public CExtPmBridge
  36. {
  37. // Construction
  38. public:
  39. DECLARE_DYNCREATE( CExtStatusControlBar );
  40. DECLARE_CExtPmBridge_MEMBERS( CExtStatusControlBar );
  41. CExtStatusControlBar();
  42. // Attributes
  43. public:
  44. // Operations
  45. public:
  46. int GetPaneCount() const;
  47. void SetPaneWidth(int nIndex, int nWidth);
  48. enum e_StatusPaneBackgroundAccent_t
  49. {
  50. __ESPBA_AUTOMATIC = 0,
  51. __ESPBA_LIGHT = 1,
  52. __ESPBA_DARK = 2,
  53. __ESPBA_MIN_VALUE   = 0,
  54. __ESPBA_MAX_VALUE   = 2,
  55. };
  56. protected:
  57. struct __PROF_UIS_API _ED_
  58. {
  59. UINT m_nDTF;
  60. CExtSafeString m_strTipText;
  61. e_StatusPaneBackgroundAccent_t m_eSPBA;
  62. COLORREF m_clrTextNormal;
  63. COLORREF m_clrTextDisabled;
  64. COLORREF m_clrBack;
  65. _ED_( UINT _nDTF = 0,
  66. __EXT_MFC_SAFE_LPCTSTR _strTipText = NULL,
  67. COLORREF clrTextNormal = COLORREF(-1L),
  68. COLORREF clrTextDisabled = COLORREF(-1L),
  69. COLORREF clrBack = COLORREF(-1L)
  70. )
  71. : m_nDTF( _nDTF )
  72. , m_strTipText( _strTipText == NULL ? _T("") : _strTipText )
  73. , m_eSPBA( __ESPBA_AUTOMATIC )
  74. , m_clrTextNormal( clrTextNormal )
  75. , m_clrTextDisabled( clrTextDisabled )
  76. , m_clrBack( clrBack )
  77. {
  78. }
  79. _ED_ & operator = ( const _ED_ & other )
  80. {
  81. m_nDTF = other.m_nDTF;
  82. m_strTipText = other.m_strTipText;
  83. m_eSPBA = other.m_eSPBA;
  84. m_clrTextNormal = other.m_clrTextNormal;
  85. m_clrTextDisabled = other.m_clrTextDisabled;
  86. m_clrBack = other.m_clrBack;
  87. return (*this);
  88. }
  89. _ED_( const _ED_ & other )
  90. {
  91. (*this) = other;
  92. }
  93. }; // struct _ED_
  94. CMap < UINT, UINT, _ED_, _ED_ > m_mapIdToExtData;
  95. bool m_bLockPainting:1;
  96. public:
  97. UINT GetPaneDrawTextFlags(
  98. int nIndex
  99. ) const;
  100. void SetPaneDrawTextFlags(
  101. int nIndex,
  102. UINT _nDTF
  103. );
  104. virtual e_StatusPaneBackgroundAccent_t OnQueryPaneBackgroundAccent(
  105. int nIndex
  106. ) const;
  107. e_StatusPaneBackgroundAccent_t GetPaneBackgroundAccent(
  108. int nIndex
  109. ) const;
  110. void SetPaneBackgroundAccent(
  111. int nIndex,
  112. e_StatusPaneBackgroundAccent_t eSPBA
  113. );
  114. bool AddPane(
  115. UINT nID, // ID of the  pane
  116. int nIndex // index of the pane
  117. );
  118. protected:
  119. bool _RemovePaneImpl(
  120. UINT nID, // ID of the pane
  121. bool bRefresh
  122. );
  123. public:
  124. bool RemovePane(
  125. UINT nID // ID of the pane
  126. );
  127. protected:
  128. int _RemovePanesImpl(
  129. int nIndexToRemove,
  130. int nCountToRemove,
  131. bool bRefresh
  132. );
  133. public:
  134. int RemovePanes(
  135. int nIndexToRemove,
  136. int nCountToRemove
  137. );
  138. bool SetPaneControl(CWnd* pWnd, UINT nID, bool bAutoDestroy);
  139. bool SetPaneControl(HWND hWnd, UINT nID, bool bAutoDestroy);
  140. bool RemovePaneControl( UINT nID );
  141. void DrawPaneSeparatorsSet( bool bSet = true );
  142. bool DrawPaneSeparatorsGet() const;
  143. void OuterRectInFirstBandSet( bool bSet = true );
  144. bool OuterRectInFirstBandGet() const;
  145. void HideTextOnDisabledPanesSet( bool bSet = true );
  146. bool HideTextOnDisabledPanesGet() const;
  147. void EnableControl( int nIndex, bool bEnable = true );
  148. void SetPaneInfo(int nIndex, UINT nID, UINT nStyle, int cxWidth);
  149. void SetPaneStyle(int nIndex, UINT nStyle);
  150. void WidthFromContent( int nIndex );
  151. // Overrides
  152. // ClassWizard generated virtual function overrides
  153. //{{AFX_VIRTUAL(CExtStatusControlBar)
  154. protected:
  155. virtual void PostNcDestroy();
  156. virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
  157. //}}AFX_VIRTUAL
  158. // Implementation
  159. public:
  160. virtual ~CExtStatusControlBar();
  161. UINT GetItemID(
  162. int nIndex
  163. ) const;
  164. BOOL SetIndicators(
  165. const UINT * lpIDArray,
  166. int nIDCount
  167. );
  168. void DrawBorders( 
  169. CDC * pDC, 
  170. CRect & rc 
  171. );
  172. virtual int HitTestStatusPane(
  173. CPoint ptClient
  174. ) const;
  175. CExtSafeString GetTipText( 
  176. int nPane 
  177. const;
  178. void SetTipText( 
  179. int nPane, 
  180. __EXT_MFC_SAFE_LPCTSTR pszTipText 
  181. );
  182. void SetPaneBkColor( 
  183. int nPane, 
  184. COLORREF clrBk = COLORREF(-1L)
  185. );
  186. void SetPaneTextColor(
  187. int nPane, 
  188. bool bEnabled,
  189. COLORREF clrText = COLORREF(-1L)
  190. );
  191. COLORREF GetPaneBkColor( 
  192. int nPane
  193. ) const;
  194. COLORREF GetPaneTextColor(
  195. int nPane,
  196. bool bEnabled
  197. ) const;
  198. INT m_nAdvancedTipStyle;
  199. bool m_bOuterRectInFirstBand:1;
  200. bool m_bCompleteRepaint:1;
  201. bool m_bDrawPaneSeparatorsInsteadOfBorders:1;
  202. bool m_bHideTextOnDisabledPanes:1;
  203. bool m_bDoNotPaintIcons:1;
  204. UINT m_nDrawPaneTextFlags; // DT_SINGLELINE|DT_LEFT|DT_VCENTER
  205. virtual bool OnQueryDrawPaneSeparatorsInsteadOfBorders() const;
  206. protected:
  207. COLORREF m_clrStatusBk;
  208. COLORREF m_clrGripper;
  209. COLORREF m_clrPaneRect;
  210. COLORREF m_clrPaneTextNormal;
  211. COLORREF m_clrPaneTextDisabled;
  212. virtual __EXT_MFC_INT_PTR OnToolHitTest(
  213. CPoint point,
  214. TOOLINFO * pTI
  215. ) const;
  216. virtual CExtPopupMenuTipWnd * OnAdvancedPopupMenuTipWndGet() const;
  217. virtual void OnAdvancedPopupMenuTipWndDisplay(
  218. CExtPopupMenuTipWnd & _ATTW,
  219. const RECT & rcExcludeArea,
  220. __EXT_MFC_SAFE_LPCTSTR strTipText
  221. ) const;
  222. virtual void _RemovePanesImpl();
  223. void _SyncStatusBarColors();
  224. CFrameWnd * _GetDockingFrameImpl();
  225. virtual void DoPaint( CDC * pDC );
  226. virtual void OnPaintEntireBackground(
  227. CDC & dc,
  228. const CRect & rcBk
  229. );
  230. virtual void OnErasePaneBackground( // by default does nothing
  231. CDC & dc,
  232. int nPaneIdx,
  233. const CRect & rcPane
  234. );
  235. virtual void OnPaintPane(
  236. CDC & dc,
  237. int nPaneIdx,
  238. const CRect & rcPane,
  239. DWORD dwPaneStyle,
  240. HICON hIcon,
  241. __EXT_MFC_SAFE_LPCTSTR sPaneText, // by default it's text from the status bar control
  242. UINT nDrawTextFlags // by default m_nDrawPaneTextFlags is used
  243. );
  244. virtual COLORREF OnQueryPaneTextColor( // COLORREF(-1L) <- detect color automatically
  245. int nPaneIdx,
  246. bool bEnabled
  247. ) const;
  248. virtual COLORREF OnQueryPaneBkColor( // COLORREF(-1L) <- detect color automatically
  249. int nPaneIdx
  250. ) const;
  251. virtual bool OnQueryGripperEnabledState() const;
  252. virtual void OnPaintGripper(
  253. CDC & dc,
  254. const CRect & rcGrip
  255. );
  256. virtual void OnPaintSeparator(
  257. CDC & dc,
  258. int nPaneIdxAfterSep,
  259. const CRect & rcPaneBefore,
  260. const CRect & rcPaneAfter
  261. );
  262. struct __PROF_UIS_API _STATUSBAR_PANE_
  263. {
  264. UINT    nID;        // IDC of indicator: 0 => normal text area
  265. int     cxText;     // width of string area in pixels
  266. //   on both sides there is a 3 pixel gap and
  267. //   a one pixel border, making a pane 6 pixels wider
  268. UINT    nStyle;     // style flags (SBPS_*)
  269. UINT    nFlags;     // state flags (SBPF_*)
  270. CExtSafeString strText;    // text in the pane
  271. _STATUSBAR_PANE_()
  272. {
  273. nID = cxText = nStyle = nFlags = 0;
  274. }
  275. }; // struct _STATUSBAR_PANE_
  276. struct __PROF_UIS_API _STATUSBAR_PANE_CTRL_
  277. {
  278. HWND hWnd;
  279. UINT nID;
  280. bool bAutoDestroy;
  281. }; // struct _STATUSBAR_PANE_CTRL_
  282. CArray < _STATUSBAR_PANE_CTRL_*, _STATUSBAR_PANE_CTRL_* > m_arrPaneControls; 
  283. _STATUSBAR_PANE_* GetPanePtr(int nIndex) const;
  284. _STATUSBAR_PANE_ * _GetPanePtr( int nIndex ) const;
  285. bool PaneInfoGet(
  286. int nIndex, 
  287. _STATUSBAR_PANE_* pPane
  288. ) const;
  289. bool PaneInfoSet(
  290. int nIndex, 
  291. _STATUSBAR_PANE_* pPane
  292. );
  293. void RepositionControls( 
  294. bool bUpdate = true 
  295. );
  296. // Generated message map functions
  297. protected:
  298. //{{AFX_MSG(CExtStatusControlBar)
  299. afx_msg void OnPaint();
  300. afx_msg void OnNcPaint();
  301. afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
  302. afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
  303. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  304. afx_msg UINT OnNcHitTest(CPoint point);
  305. afx_msg void OnSize(UINT nType, int cx, int cy);
  306. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  307. afx_msg void OnCancelMode();
  308. //}}AFX_MSG
  309. afx_msg LRESULT OnSizeParent( WPARAM wParam, LPARAM lParam );
  310. afx_msg void OnSysColorChange();
  311. afx_msg void OnSettingChange(UINT uFlags, __EXT_MFC_SAFE_LPCTSTR lpszSection);
  312. afx_msg LRESULT OnDisplayChange( WPARAM wParam, LPARAM lParam );
  313. afx_msg LRESULT OnThemeChanged( WPARAM wParam, LPARAM lParam );
  314. DECLARE_MESSAGE_MAP()
  315. }; // class CExtStatusControlBar
  316. #endif // __EXT_MFC_NO_STATUSBAR
  317. /////////////////////////////////////////////////////////////////////////////
  318. //{{AFX_INSERT_LOCATION}}
  319. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
  320. #endif // __EXT_STATUSCONTROLBAR_H