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

界面编程

开发平台:

Visual C++

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