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

界面编程

开发平台:

Visual C++

  1. #if !defined(AFX_PAGESTATUSBAR_H__9E21316E_7C7F_4E8E_B28F_7DC29EB448A3__INCLUDED_)
  2. #define AFX_PAGESTATUSBAR_H__9E21316E_7C7F_4E8E_B28F_7DC29EB448A3__INCLUDED_
  3. #if _MSC_VER > 1000
  4. #pragma once
  5. #endif // _MSC_VER > 1000
  6. // PageStatusBar.h : header file
  7. //
  8. #include "PageBase.h"
  9. class CExtStatusBarSliderCtrl : public CExtSliderWnd
  10. {
  11. public:
  12. virtual void PostNcDestroy()
  13. {
  14. delete this;
  15. }
  16. //{{AFX_MSG(CExtStatusBarSliderCtrl)
  17. afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor);
  18. //}}AFX_MSG
  19. DECLARE_MESSAGE_MAP()
  20. }; // class CExtStatusBarSliderCtrl
  21. class CExtStatusBarAnimateCtrl : public CAnimateCtrl
  22. {
  23. public:
  24. DECLARE_DYNCREATE( CExtStatusBarAnimateCtrl );
  25. CExtStatusBarAnimateCtrl();
  26. virtual ~CExtStatusBarAnimateCtrl();
  27. //{{AFX_MSG(CExtStatusBarAnimateCtrl)
  28. afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor);
  29. //}}AFX_MSG
  30. DECLARE_MESSAGE_MAP()
  31. protected:
  32. COLORREF m_clrBackgroundPrev;
  33. CBrush m_brBack;
  34. virtual void PostNcDestroy()
  35. {
  36. delete this;
  37. }
  38. }; // class CExtStatusBarAnimateCtrl
  39. /////////////////////////////////////////////////////////////////////////////
  40. // CPageStatusBar dialog
  41. class CPageStatusBar : public CPageBase
  42. {
  43. // Construction
  44. public:
  45. CPageStatusBar(CWnd* pParent = NULL);   // standard constructor
  46. // Dialog Data
  47. //{{AFX_DATA(CPageStatusBar)
  48. enum { IDD = IDD_PAGE_STATUS_BAR };
  49. CExtEdit m_wndPosition;
  50. CExtRadioButton m_wndRadioText;
  51. CExtRadioButton m_wndRadioStatic;
  52. CExtRadioButton m_wndRadioSlider;
  53. CExtRadioButton m_wndRadioProgress;
  54. CExtRadioButton m_wndRadioEdit;
  55. CExtRadioButton m_wndRadioButton;
  56. CExtRadioButton m_wndRadioAnimCtrl;
  57. CExtRadioButton m_wndRadioToolbar;
  58. CExtRadioButton m_wndRadioZoom;
  59. CExtRadioButton m_wndRadioScrollBar;
  60. CExtLabel m_StaticPosition;
  61. CExtButton m_btnDisablePane;
  62. CExtSpinWnd m_SpinPosition;
  63. CExtButton m_btnRemovePane;
  64. CExtButton m_btnAddPane;
  65. CExtCheckBox m_chkHideTextOnDisabledPanes;
  66. CExtCheckBox m_chkOuterRectInFirstBand;
  67. CExtCheckBox m_chkDrawPaneSeparators;
  68. int m_nPosition;
  69. //}}AFX_DATA
  70. class CExtStatusBarEdit : public CExtEdit{
  71. virtual void PostNcDestroy(){
  72. delete this;
  73. }
  74. }; // class CExtStatusBarEdit
  75. class CExtStatusBarButton : public CExtButton
  76. {
  77. protected:
  78. virtual LRESULT WindowProc(    
  79. UINT uMsg,
  80. WPARAM wParam,
  81. LPARAM lParam
  82. )
  83. {
  84. if(  uMsg == BM_SETSTYLE 
  85. && wParam == BS_DEFPUSHBUTTON
  86. )
  87. return 0L;
  88. return CExtButton::WindowProc(uMsg, wParam, lParam);
  89. }
  90. virtual void PostNcDestroy()
  91. {
  92. delete this;
  93. }
  94. }; // class CExtStatusBarButton
  95. class CExtStatusBarLabel : public CExtLabel
  96. {
  97. virtual void OnDrawLabelText(
  98. CDC & dc,
  99. const RECT & rcText,
  100. __EXT_MFC_SAFE_LPCTSTR strText,
  101. DWORD dwDrawTextFlags,
  102. bool bEnabled
  103. )
  104. {
  105. bEnabled;
  106. INT nOldBkMode = dc.SetBkMode( TRANSPARENT );
  107. LOGFONT lf;
  108. memset( &lf, 0, sizeof(LOGFONT) );
  109. lf.lfQuality = PROOF_QUALITY;
  110. lf.lfHeight = 16;
  111. lf.lfWeight = 600;
  112. lstrcpy( lf.lfFaceName, _T("Arial") );
  113. CFont f;
  114. f.CreateFontIndirect( &lf );
  115. CFont * pOldFont = dc.SelectObject( &f );
  116. CRect rc( rcText );
  117. COLORREF clrOldText =
  118. dc.SetTextColor( g_PaintManager->GetColor( COLOR_3DHILIGHT, this ) );
  119. rc.top -= 3;
  120. dc.DrawText(
  121. LPCTSTR(strText),
  122. int( _tcslen( LPCTSTR( strText ) ) ),
  123. rc,
  124. dwDrawTextFlags
  125. );
  126. rc = rcText;
  127. rc.top -= 1;
  128. rc.left += 2;
  129. dc.SetTextColor( GetSysColor( COLOR_3DSHADOW ) );
  130. dc.DrawText(
  131. LPCTSTR(strText),
  132. int( _tcslen( LPCTSTR( strText ) ) ),
  133. rc,
  134. dwDrawTextFlags
  135. );
  136. rc = rcText;
  137. rc.left += 1;
  138. rc.top -= 2;
  139. dc.SetTextColor( RGB(0,0,255) );
  140. dc.DrawText(
  141. LPCTSTR(strText),
  142. int( _tcslen( LPCTSTR( strText ) ) ),
  143. rc,
  144. dwDrawTextFlags
  145. );
  146. dc.SelectObject( pOldFont );
  147. f.DeleteObject();
  148. dc.SetBkMode( nOldBkMode );
  149. dc.SetTextColor( clrOldText );
  150. }
  151. void OnEraseBackground(
  152. CDC & dc,
  153. const CRect & rcClient
  154. )
  155. {
  156. ASSERT_VALID( this );
  157. COLORREF clrBackground = GetBkColor();
  158. bool bTransparent = false;
  159. if( clrBackground == COLORREF(-1L) )
  160. {
  161. CExtStatusControlBar * pWndParent = 
  162. DYNAMIC_DOWNCAST( CExtStatusControlBar, GetParent() );
  163. ASSERT( pWndParent != NULL );
  164. CRect rcPaint;
  165. pWndParent->GetWindowRect( &rcPaint );
  166. ScreenToClient( &rcPaint );
  167. CRect _rcClient( rcClient );
  168. ClientToScreen( &_rcClient );
  169. pWndParent->ScreenToClient( &_rcClient );
  170. if( pWndParent->m_bCompleteRepaint )
  171. {
  172. dc.OffsetViewportOrg( 
  173. _rcClient.left, 
  174. );
  175. bool bRet = 
  176. PmBridge_GetPM()->StatusBar_EraseBackground(
  177. dc,
  178. rcPaint,
  179. pWndParent
  180. );
  181. dc.OffsetViewportOrg( 
  182. -_rcClient.left, 
  183. );
  184. if( !bRet )
  185. {
  186. bool bTransparent = false;
  187. if( PmBridge_GetPM()->GetCb2DbTransparentMode(pWndParent) )
  188. {
  189. if( PmBridge_GetPM()->PaintDockerBkgnd( true, dc, this ) )
  190. bTransparent = true;
  191. }
  192. if( ! bTransparent )
  193. dc.FillSolidRect( 
  194. &rcPaint, 
  195. PmBridge_GetPM()->GetColor( CExtPaintManager::CLR_3DFACE_OUT, pWndParent ) 
  196. );
  197. }
  198. INT nIndex = pWndParent->CommandToIndex( IDS_PANE_LABEL );
  199. if( nIndex >= 0 )
  200. {
  201. dc.OffsetViewportOrg( 
  202. _rcClient.left, 
  203. );
  204. PmBridge_GetPM()->StatusBar_ErasePaneBackground(
  205. dc,
  206. nIndex,
  207. rcPaint,
  208. pWndParent
  209. );
  210. dc.OffsetViewportOrg( 
  211. -_rcClient.left, 
  212. );
  213. bTransparent = true;
  214. }
  215. } // if( pWndParent->m_bCompleteRepaint )
  216. }
  217. if( ! bTransparent )
  218. dc.FillSolidRect(
  219. &rcClient,
  220. (clrBackground != COLORREF(-1L)) 
  221. ? clrBackground 
  222. : PmBridge_GetPM()->GetColor( CExtPaintManager::CLR_3DFACE_OUT, this ) 
  223. );
  224. }
  225. virtual void PostNcDestroy()
  226. {
  227. delete this;
  228. }
  229. }; // class CExtStatusBarLabel
  230. class CExtStatusBarProgressCtrl : public CExtProgressWnd
  231. {
  232. public:
  233. CExtStatusBarProgressCtrl()
  234. {
  235. }
  236. protected:
  237. virtual LRESULT WindowProc(    
  238. UINT uMsg,
  239. WPARAM wParam,
  240. LPARAM lParam
  241. )
  242. {
  243. // if( uMsg == WM_ERASEBKGND )
  244. // return (!0);
  245. // if( uMsg == WM_PAINT )
  246. // {
  247. // CRect rcClient;
  248. // GetClientRect( &rcClient );
  249. // CPaintDC dcPaint( this );
  250. // CExtMemoryDC dc( &dcPaint, &rcClient );
  251. // if( g_PaintManager->GetCb2DbTransparentMode(this) )
  252. // {
  253. // CExtPaintManager::stat_ExcludeChildAreas(
  254. // dc,
  255. // GetSafeHwnd(),
  256. // CExtPaintManager::stat_DefExcludeChildAreaCallback
  257. // );
  258. // g_PaintManager->PaintDockerBkgnd( true, dc, this );
  259. // } // if( g_PaintManager->GetCb2DbTransparentMode(this) )
  260. // else
  261. // dc.FillSolidRect( &rcClient, g_PaintManager->GetColor( CExtPaintManager::CLR_3DFACE_OUT, this ) );
  262. // DefWindowProc( WM_PAINT, WPARAM(dc.GetSafeHdc()), 0L );
  263. // g_PaintManager->OnPaintSessionComplete( this );
  264. // return 0;
  265. // }
  266. if( uMsg == WM_TIMER )
  267. {
  268. StepIt();
  269. }
  270. else if( uMsg == WM_DESTROY )
  271. {
  272. KillTimer(0);
  273. }
  274. LRESULT lResult = CExtProgressWnd::WindowProc( uMsg, wParam, lParam );
  275. return lResult;
  276. }
  277. virtual void PostNcDestroy(){
  278. delete this;
  279. }
  280. }; // class CExtStatusBarProgressCtrl
  281. class CExtStatusBarToolbar : public CExtToolControlBar
  282. {
  283. public:
  284. CExtStatusBarToolbar()
  285. {
  286. m_cxLeftBorder = m_cxRightBorder = 
  287. m_cyTopBorder = m_cyBottomBorder = 0;
  288. }
  289. class TinyButton : public CExtBarButton
  290. {
  291. public:
  292. TinyButton(
  293. CExtToolControlBar * pBar = NULL,
  294. UINT nCmdID = ID_SEPARATOR,
  295. UINT nStyle = 0
  296. )
  297. : CExtBarButton(
  298. pBar,
  299. nCmdID,
  300. nStyle
  301. )
  302. {
  303. }
  304. virtual CSize CalculateLayout(
  305. CDC & dc,
  306. CSize sizePreCalc,
  307. BOOL bHorz
  308. )
  309. {
  310. ASSERT_VALID( this );
  311. dc;
  312. sizePreCalc;
  313. bHorz;
  314. return CSize( 15, 14 );
  315. }
  316. }; // class TinyButton
  317. protected:
  318. virtual LRESULT WindowProc(
  319. UINT message,
  320. WPARAM wParam,
  321. LPARAM lParam
  322. )
  323. {
  324. ASSERT_VALID( this );
  325. if( message == WM_NCCALCSIZE )
  326. return 0L;
  327. return CExtToolControlBar::WindowProc( message, wParam, lParam );
  328. }
  329. virtual CExtBarContentExpandButton * OnCreateBarRightBtn()
  330. {
  331. ASSERT_VALID( this );
  332. return NULL;
  333. }
  334. virtual CExtBarButton * OnCreateBarCommandBtn(
  335. UINT nCmdID,
  336. UINT nStyle = 0
  337. )
  338. {
  339. ASSERT_VALID( this );
  340. CExtBarButton * pTBB = new TinyButton( this, nCmdID, nStyle );
  341. ASSERT_VALID( pTBB );
  342. return pTBB;
  343. }
  344. virtual void _RecalcPositionsImpl()
  345. {
  346. if( m_pDockSite->GetSafeHwnd() != NULL
  347. && IsFloating()
  348. )
  349. {
  350. CExtToolControlBar::_RecalcPositionsImpl();
  351. return;
  352. }
  353. INT nCountOfButtons = GetButtonsCount();
  354. if( nCountOfButtons == 0 )
  355. return;
  356. CExtBarButton * pTBB = GetButton( nCountOfButtons - 1 );
  357. ASSERT_VALID( pTBB );
  358. CExtToolControlBar::_RecalcPositionsImpl();
  359. CRect rcClient;
  360. GetClientRect( &rcClient );
  361. INT nButtonIndex, nSummaryButtonsExtent = 0;
  362. for( nButtonIndex = 0; nButtonIndex < nCountOfButtons; nButtonIndex ++ )
  363. {
  364. pTBB = GetButton( nButtonIndex );
  365. ASSERT_VALID( pTBB );
  366. if( ! pTBB->IsVisible() )
  367. continue;
  368. if( (pTBB->GetStyle()&TBBS_HIDDEN) != 0 )
  369. continue;
  370. CRect rcButton = *pTBB;
  371. INT nButtonExtent = rcButton.Width();
  372. nSummaryButtonsExtent += nButtonExtent;
  373. }
  374. INT nClientExtent = rcClient.Width();
  375. int nShift = 0;
  376. nShift = (nClientExtent - nSummaryButtonsExtent) / 2;
  377. if( nShift == 0 )
  378. return;
  379. for( nButtonIndex = 0; nButtonIndex < nCountOfButtons; nButtonIndex ++ )
  380. {
  381. pTBB = GetButton( nButtonIndex );
  382. ASSERT_VALID( pTBB );
  383. if( ! pTBB->IsVisible() )
  384. continue;
  385. if( (pTBB->GetStyle()&TBBS_HIDDEN) != 0 )
  386. continue;
  387. CRect rcButton = *pTBB;
  388. rcButton.OffsetRect( nShift, 1 );
  389. pTBB->SetRect( rcButton );
  390. }
  391. }
  392. virtual CSize _CalcLayout(
  393. DWORD dwMode,
  394. int nLength = -1
  395. )
  396. {
  397. ASSERT_VALID( this );
  398. CSize szSize = 
  399. CExtToolControlBar::_CalcLayout(
  400. dwMode,
  401. nLength
  402. );
  403. szSize.cx -= 5;
  404. return szSize;
  405. }
  406. virtual void DoEraseBk( CDC * pDC )
  407. {
  408. ASSERT( pDC->GetSafeHdc() != NULL );
  409. CExtStatusControlBar * pWndParent = 
  410. DYNAMIC_DOWNCAST( CExtStatusControlBar, GetParent() );
  411. ASSERT( pWndParent != NULL );
  412. CRect rcPaint;
  413. pWndParent->GetWindowRect( &rcPaint );
  414. ScreenToClient( &rcPaint );
  415. CRect rcClient;
  416. GetClientRect( &rcClient );
  417. ClientToScreen( &rcClient );
  418. pWndParent->ScreenToClient( &rcClient );
  419. if( pWndParent->m_bCompleteRepaint )
  420. {
  421. pDC->OffsetViewportOrg( 
  422. rcClient.left, 
  423. );
  424. bool bRet = 
  425. PmBridge_GetPM()->StatusBar_EraseBackground(
  426. *pDC,
  427. rcPaint,
  428. pWndParent
  429. );
  430. pDC->OffsetViewportOrg( 
  431. -rcClient.left, 
  432. );
  433. if( !bRet )
  434. {
  435. bool bTransparent = false;
  436. if( PmBridge_GetPM()->GetCb2DbTransparentMode(pWndParent) )
  437. {
  438. if( PmBridge_GetPM()->PaintDockerBkgnd( true, *pDC, this ) )
  439. bTransparent = true;
  440. }
  441. if( ! bTransparent )
  442. pDC->FillSolidRect( 
  443. &rcPaint, 
  444. PmBridge_GetPM()->GetColor( CExtPaintManager::CLR_3DFACE_OUT, pWndParent ) 
  445. );
  446. }
  447. INT nIndex = pWndParent->CommandToIndex( IDS_PANE_TOOLBAR );
  448. if( nIndex >= 0 )
  449. {
  450. pDC->OffsetViewportOrg( 
  451. rcClient.left, 
  452. );
  453. PmBridge_GetPM()->StatusBar_ErasePaneBackground(
  454. *pDC,
  455. nIndex,
  456. rcPaint,
  457. pWndParent
  458. );
  459. pDC->OffsetViewportOrg( 
  460. -rcClient.left, 
  461. );
  462. }
  463. } // if( pWndParent->m_bCompleteRepaint )
  464. }
  465. virtual void PostNcDestroy()
  466. {
  467. delete this;
  468. }
  469. }; // class CExtStatusBarToolbar
  470. class CExtStatusBarScrollBar : public CExtScrollBar
  471. {
  472. protected:
  473. virtual void PostNcDestroy()
  474. {
  475. delete this;
  476. }
  477. }; // class CExtStatusBarScrollBar
  478. class CExtStatusBarZoomScrollBar : public CExtZoomScrollBar
  479. {
  480. protected:
  481. virtual void PostNcDestroy()
  482. {
  483. delete this;
  484. }
  485. }; // class CExtStatusBarZoomScrollBar
  486. CExtStatusBarEdit * m_pWndEdit;
  487. CExtStatusBarSliderCtrl * m_pWndSliderCtrl;
  488. CExtStatusBarButton * m_pWndButton;
  489. CExtStatusBarProgressCtrl * m_pWndProgressCtrl;
  490. CExtStatusBarAnimateCtrl * m_pWndAnimateCtrl;
  491. CExtStatusBarLabel * m_pWndLabel;
  492. CExtStatusBarToolbar * m_pWndToolBar;
  493. CExtStatusBarScrollBar * m_pWndScrollBar;
  494. CExtStatusBarZoomScrollBar * m_pWndZoomScrollBar;
  495. CExtStatusControlBar m_wndStatusBar;
  496. // Overrides
  497. // ClassWizard generated virtual function overrides
  498. //{{AFX_VIRTUAL(CPageStatusBar)
  499. public:
  500. virtual BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo);
  501. protected:
  502. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  503. virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
  504. //}}AFX_VIRTUAL
  505. // Implementation
  506. protected:
  507. // Generated message map functions
  508. //{{AFX_MSG(CPageStatusBar)
  509. afx_msg void OnDrawPaneSeparators();
  510. afx_msg void OnOuterRectInFirstBand();
  511. afx_msg void OnHideTextOnDisabledPanes();
  512. afx_msg void OnAddPane();
  513. afx_msg void OnRemovePane();
  514. afx_msg void OnDisablePane();
  515. afx_msg void OnStatusBarButton();
  516. virtual BOOL OnInitDialog();
  517. afx_msg void OnSize(UINT nType, int cx, int cy);
  518. afx_msg void OnChangePosition();
  519. //}}AFX_MSG
  520. DECLARE_MESSAGE_MAP()
  521. private:
  522. void CheckControls();
  523. bool m_bInitComplete;
  524. };
  525. //{{AFX_INSERT_LOCATION}}
  526. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
  527. #endif // !defined(AFX_PAGESTATUSBAR_H__9E21316E_7C7F_4E8E_B28F_7DC29EB448A3__INCLUDED_)