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

界面编程

开发平台:

Visual C++

  1. // ChildFormView.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "StatusPanes.h"
  5. #include "ChildFormView.h"
  6. #include "MainFrm.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CChildFormView
  14. IMPLEMENT_DYNCREATE(CChildFormView, CFormView)
  15. CChildFormView::CChildFormView()
  16. : CExtWA < CExtWS < CExtAFV < CFormView > > > ( CChildFormView::IDD, ((CWnd *)NULL) )
  17. , m_pWndEdit(NULL)
  18. , m_pWndSliderCtrl(NULL)
  19. , m_pWndButton(NULL)
  20. , m_pWndProgressCtrl(NULL)
  21. , m_pWndAnimateCtrl(NULL)
  22. , m_pWndLabel(NULL)
  23. , m_pWndToolBar(NULL)
  24. , m_pWndZoomScrollBar(NULL)
  25. , m_pWndScrollBar(NULL)
  26. {
  27. //{{AFX_DATA_INIT(CChildFormView)
  28. m_nPosition = 1;
  29. //}}AFX_DATA_INIT
  30. m_bInitComplete = false;
  31. m_pMainFrame = DYNAMIC_DOWNCAST(CMainFrame,AfxGetMainWnd());
  32. }
  33. CChildFormView::~CChildFormView()
  34. {
  35. }
  36. void CChildFormView::DoDataExchange(CDataExchange* pDX)
  37. {
  38. CFormView::DoDataExchange(pDX);
  39. //{{AFX_DATA_MAP(CChildFormView)
  40. DDX_Control(pDX, IDC_RADIO_TYPE_TEXT, m_wndRadioText);
  41. DDX_Control(pDX, IDC_RADIO_TYPE_TOOLBAR, m_wndRadioToolbar);
  42. DDX_Control(pDX, IDC_RADIO_TYPE_STATIC, m_wndRadioStatic);
  43. DDX_Control(pDX, IDC_RADIO_TYPE_SLIDER, m_wndRadioSlider);
  44. DDX_Control(pDX, IDC_RADIO_TYPE_PROGRESS, m_wndRadioProgress);
  45. DDX_Control(pDX, IDC_RADIO_TYPE_EDIT, m_wndRadioEdit);
  46. DDX_Control(pDX, IDC_RADIO_TYPE_BUTTON, m_wndRadioButton);
  47. DDX_Control(pDX, IDC_RADIO_TYPE_ANIM_CTRL, m_wndRadioAnimCtrl);
  48. DDX_Control(pDX, IDC_RADIO_TYPE_ZOOM, m_wndRadioZoom);
  49. DDX_Control(pDX, IDC_RADIO_TYPE_SCROLLBAR, m_wndRadioScrollBar);
  50. DDX_Control(pDX, IDC_STATIC3, m_wndStatic3);
  51. DDX_Control(pDX, IDC_STATIC2, m_wndStatic2);
  52. DDX_Control(pDX, IDC_STATIC1, m_wndStatic1);
  53. DDX_Control(pDX, IDC_DISABLE_PANE, m_btnDisablePane);
  54. DDX_Control(pDX, IDC_SPIN_POSITION, m_SpinPosition);
  55. DDX_Control(pDX, IDC_REMOVE_PANE, m_btnRemovePane);
  56. DDX_Control(pDX, IDC_ADD_PANE, m_btnAddPane);
  57. DDX_Control(pDX, IDC_HIDE_TEXT_ON_DISABLED_PANES, m_chkHideTextOnDisabledPanes);
  58. DDX_Control(pDX, IDC_OUTER_RECT_IN_FIRST_BAND, m_chkOuterRectInFirstBand);
  59. DDX_Control(pDX, IDC_DRAW_PANE_SEPARATORS, m_chkDrawPaneSeparators);
  60. DDX_Text(pDX, IDC_POSITION, m_nPosition);
  61. DDV_MinMaxInt(pDX, m_nPosition, 0, 20);
  62. //}}AFX_DATA_MAP
  63. }
  64. BEGIN_MESSAGE_MAP(CChildFormView, CFormView)
  65. //{{AFX_MSG_MAP(CChildFormView)
  66. ON_BN_CLICKED(IDC_DRAW_PANE_SEPARATORS, OnDrawPaneSeparators)
  67. ON_BN_CLICKED(IDC_OUTER_RECT_IN_FIRST_BAND, OnOuterRectInFirstBand)
  68. ON_BN_CLICKED(IDC_HIDE_TEXT_ON_DISABLED_PANES, OnHideTextOnDisabledPanes)
  69. ON_BN_CLICKED(IDC_ADD_PANE, OnAddPane)
  70. ON_BN_CLICKED(IDC_REMOVE_PANE, OnRemovePane)
  71. ON_BN_CLICKED(IDC_DISABLE_PANE, OnDisablePane)
  72. ON_BN_CLICKED(IDC_STATUS_BAR_BUTTON, OnStatusBarButton)
  73. ON_WM_SIZE()
  74. ON_UPDATE_COMMAND_UI(IDC_STATUS_BAR_BUTTON, OnUpdateStatusBarButton)
  75. ON_UPDATE_COMMAND_UI(IDC_STATUS_BAR_PROGRESS, OnUpdateStatusBarProgress)
  76. ON_UPDATE_COMMAND_UI(IDC_STATUS_BAR_ANIMATE, OnUpdateStatusBarAnimate)
  77. ON_WM_TIMER()
  78. ON_EN_CHANGE(IDC_POSITION, OnChangePosition)
  79. //}}AFX_MSG_MAP
  80. END_MESSAGE_MAP()
  81. /////////////////////////////////////////////////////////////////////////////
  82. // CChildFormView diagnostics
  83. #ifdef _DEBUG
  84. void CChildFormView::AssertValid() const
  85. {
  86. CFormView::AssertValid();
  87. }
  88. void CChildFormView::Dump(CDumpContext& dc) const
  89. {
  90. CFormView::Dump(dc);
  91. }
  92. #endif //_DEBUG
  93. /////////////////////////////////////////////////////////////////////////////
  94. // CChildFormView message handlers
  95. BOOL CChildFormView::PreCreateWindow(CREATESTRUCT& cs) 
  96. {
  97. if (!CFormView::PreCreateWindow(cs))
  98. return FALSE;
  99. cs.dwExStyle &= ~(WS_EX_CLIENTEDGE|WS_EX_STATICEDGE);
  100. cs.style &= ~WS_BORDER;
  101. cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS, 
  102. ::LoadCursor(NULL, IDC_ARROW), HBRUSH(COLOR_WINDOW+1), NULL);
  103. return TRUE;
  104. }
  105. //////////////////////////////////////////////////////////////////////////
  106. void CChildFormView::OnInitialUpdate() 
  107. {
  108. CFormView::OnInitialUpdate();
  109. ShowSizeGrip(FALSE);
  110. m_SpinPosition.SetRange(0,20);
  111. m_chkHideTextOnDisabledPanes.SetCheck(0);
  112. OnHideTextOnDisabledPanes();
  113. m_bInitComplete = true;
  114. m_wndRadioText.SetCheck( 1 );
  115. CheckControls();
  116. }
  117. //////////////////////////////////////////////////////////////////////////
  118. void CChildFormView::OnDrawPaneSeparators() 
  119. {
  120. if( m_chkDrawPaneSeparators.GetCheck() == 1 ){
  121. m_pMainFrame->m_wndStatusBar.DrawPaneSeparatorsSet(true);
  122. m_chkOuterRectInFirstBand.EnableWindow(0);
  123. }
  124. else{
  125. m_pMainFrame->m_wndStatusBar.DrawPaneSeparatorsSet(false);
  126. m_chkOuterRectInFirstBand.EnableWindow(1);
  127. }
  128. if( m_pWndButton && ::IsWindow(m_pWndButton->m_hWnd)){
  129. if(m_chkDrawPaneSeparators.GetCheck() == 1){
  130. m_pWndButton->SetDrawBorder(1);
  131. }
  132. else{
  133. m_pWndButton->SetDrawBorder(0);
  134. }
  135. }
  136. }
  137. void CChildFormView::OnOuterRectInFirstBand() 
  138. {
  139. m_pMainFrame->m_wndStatusBar.OuterRectInFirstBandSet( 
  140. m_chkOuterRectInFirstBand.GetCheck() == 1 
  141. );
  142. }
  143. void CChildFormView::OnHideTextOnDisabledPanes() 
  144. {
  145. m_pMainFrame->m_wndStatusBar.HideTextOnDisabledPanesSet( 
  146. m_chkHideTextOnDisabledPanes.GetCheck() == 1 
  147. );
  148. }
  149. //////////////////////////////////////////////////////////////////////////
  150. void CChildFormView::OnAddPane() 
  151. {
  152. CheckControls();
  153. if( m_nPosition < 0 || m_nPosition > 20 )
  154. return;
  155. if( m_wndRadioText.GetCheck() ) // text
  156. {
  157. bool bRet = m_pMainFrame->m_wndStatusBar.AddPane(IDS_PANE_TEXT,m_nPosition);
  158. if(!bRet){
  159. AfxMessageBox(_T("Pane index out of rangenor pane with same ID already exists in the status bar"), MB_ICONERROR);
  160. return;
  161. }
  162. //m_pMainFrame->m_wndStatusBar.SetTipText( m_nPosition, _T("Tooltip") );
  163. }
  164. if( m_wndRadioEdit.GetCheck() ) // edit
  165. {
  166. m_pWndEdit = new CExtStatusBarEdit;
  167. if (!m_pWndEdit->Create(
  168. WS_CHILD|WS_VISIBLE|WS_TABSTOP, 
  169. CRect(0,0,0,0), 
  170. &m_pMainFrame->m_wndStatusBar, 
  171. 0))
  172. {
  173. TRACE(_T("Failed to create edit control.n"));
  174. return;
  175. }
  176. m_pWndEdit->SetFont(
  177. CFont::FromHandle(
  178. (HFONT)::GetStockObject(DEFAULT_GUI_FONT)
  179. )
  180. );
  181. m_pWndEdit->SetWindowText(_T("Type text here..."));
  182. bool bRet = m_pMainFrame->m_wndStatusBar.AddPane(IDS_PANE_EDIT,m_nPosition);
  183. if(!bRet){
  184. AfxMessageBox(_T("Pane index out of rangenor pane with same ID already exists in the status bar"), MB_ICONERROR);
  185. return;
  186. }
  187. int nIndex = m_pMainFrame->m_wndStatusBar.CommandToIndex(IDS_PANE_EDIT);
  188. if (nIndex == -1)
  189. return;
  190. m_pMainFrame->m_wndStatusBar.SetPaneWidth(nIndex, 100);
  191. m_pMainFrame->m_wndStatusBar.SetPaneControl(m_pWndEdit, IDS_PANE_EDIT, true);
  192. return;
  193. }
  194. if( m_wndRadioProgress.GetCheck() ) // progress ctrl
  195. {
  196. m_pWndProgressCtrl = new CExtStatusBarProgressCtrl;
  197. if (!m_pWndProgressCtrl->Create(
  198. WS_CHILD|WS_VISIBLE|WS_TABSTOP, //|PBS_SMOOTH
  199. CRect(0,0,0,0), 
  200. &m_pMainFrame->m_wndStatusBar, 
  201. IDC_STATUS_BAR_PROGRESS))
  202. {
  203. TRACE(_T("Failed to create progress control.n"));
  204. return;
  205. }
  206. m_pWndProgressCtrl->ModifyStyleEx(WS_EX_STATICEDGE,0,SWP_FRAMECHANGED);
  207. m_pWndProgressCtrl->SetRange(0,300);
  208. m_pWndProgressCtrl->SetPos(0);
  209. m_pWndProgressCtrl->SetStep(1);
  210. bool bRet = m_pMainFrame->m_wndStatusBar.AddPane(IDS_PANE_PROGRESS,m_nPosition);
  211. if(!bRet){
  212. AfxMessageBox(_T("Pane index out of rangenor pane with same ID already exists in the status bar"), MB_ICONERROR);
  213. return;
  214. }
  215. int nIndex = m_pMainFrame->m_wndStatusBar.CommandToIndex(IDS_PANE_PROGRESS);
  216. if (nIndex == -1)
  217. return;
  218. m_pMainFrame->m_wndStatusBar.SetPaneWidth(nIndex, 100);
  219. m_pMainFrame->m_wndStatusBar.SetPaneControl(m_pWndProgressCtrl, IDS_PANE_PROGRESS, true);
  220. m_pWndProgressCtrl->SetTimer(0,1,NULL);
  221. return;
  222. }
  223. if( m_wndRadioSlider.GetCheck() ) // slider ctrl
  224. {
  225. m_pWndSliderCtrl = new CExtStatusBarSliderCtrl;
  226. if (!m_pWndSliderCtrl->Create(
  227. WS_CHILD|WS_VISIBLE|WS_TABSTOP|TBS_HORZ, 
  228. CRect(0,0,0,0), 
  229. &m_pMainFrame->m_wndStatusBar, 
  230. IDC_STATUS_BAR_SLIDER))
  231. {
  232. TRACE(_T("Failed to create slider control.n"));
  233. return;
  234. }
  235. m_pWndSliderCtrl->PmBridge_Install();
  236. bool bRet = m_pMainFrame->m_wndStatusBar.AddPane(IDS_PANE_SLIDER_CTRL,m_nPosition);
  237. if(!bRet){
  238. AfxMessageBox(_T("Pane index out of rangenor pane with same ID already exists in the status bar"), MB_ICONERROR);
  239. return;
  240. }
  241. int nIndex = m_pMainFrame->m_wndStatusBar.CommandToIndex(IDS_PANE_SLIDER_CTRL);
  242. if (nIndex == -1)
  243. return;
  244. m_pMainFrame->m_wndStatusBar.SetPaneWidth(nIndex, 80);
  245. m_pMainFrame->m_wndStatusBar.SetPaneControl(m_pWndSliderCtrl, IDS_PANE_SLIDER_CTRL, true);
  246. return;
  247. }
  248. if( m_wndRadioButton.GetCheck() ) // button
  249. {
  250. m_pWndButton = new CExtStatusBarButton;
  251. if (!m_pWndButton->Create(
  252. _T("Button"),
  253. WS_CHILD|WS_VISIBLE|WS_TABSTOP,
  254. CRect(0,0,0,0), 
  255. &m_pMainFrame->m_wndStatusBar, 
  256. IDC_STATUS_BAR_BUTTON))
  257. {
  258. TRACE(_T("Failed to create button control.n"));
  259. return;
  260. }
  261. m_pWndButton->SetFlat();
  262. m_pWndButton->SetDrawBorder( m_chkDrawPaneSeparators.GetCheck()==1 );
  263. bool bRet = m_pMainFrame->m_wndStatusBar.AddPane(IDS_PANE_BUTTON,m_nPosition);
  264. if(!bRet){
  265. AfxMessageBox(_T("Pane index out of rangenor pane with same ID already exists in the status bar"), MB_ICONERROR);
  266. return;
  267. }
  268. int nIndex = m_pMainFrame->m_wndStatusBar.CommandToIndex(IDS_PANE_BUTTON);
  269. if (nIndex == -1)
  270. return;
  271. m_pMainFrame->m_wndStatusBar.SetPaneWidth(nIndex, 50);
  272. m_pMainFrame->m_wndStatusBar.SetPaneControl(m_pWndButton, IDS_PANE_BUTTON, true);
  273. return;
  274. }
  275. if( m_wndRadioAnimCtrl.GetCheck() ) // animate ctrl
  276. {
  277. m_pWndAnimateCtrl = new CExtStatusBarAnimateCtrl;
  278. if (!m_pWndAnimateCtrl->Create(
  279. WS_CHILD|WS_VISIBLE|WS_TABSTOP|ACS_CENTER|ACS_AUTOPLAY|ACS_TRANSPARENT,
  280. CRect(0,0,0,0), 
  281. &m_pMainFrame->m_wndStatusBar, 
  282. IDC_STATUS_BAR_ANIMATE))
  283. {
  284. TRACE(_T("Failed to create animate control.n"));
  285. return;
  286. }
  287. m_pWndAnimateCtrl->Open(IDR_DOWNLOAD);
  288. bool bRet = m_pMainFrame->m_wndStatusBar.AddPane(IDS_PANE_ANIMATE,m_nPosition);
  289. if(!bRet){
  290. AfxMessageBox(_T("Pane index out of rangenor pane with same ID already exists in the status bar"), MB_ICONERROR);
  291. return;
  292. }
  293. int nIndex = m_pMainFrame->m_wndStatusBar.CommandToIndex(IDS_PANE_ANIMATE);
  294. if (nIndex == -1)
  295. return;
  296. m_pMainFrame->m_wndStatusBar.SetPaneWidth(nIndex, 16);
  297. m_pMainFrame->m_wndStatusBar.SetPaneControl( m_pWndAnimateCtrl, IDS_PANE_ANIMATE, false );
  298. return;
  299. }
  300. if( m_wndRadioStatic.GetCheck() ) // label
  301. {
  302. m_pWndLabel = new CExtStatusBarLabel;
  303. if (!m_pWndLabel->Create(
  304. _T("Prof-UIS"),
  305. WS_CHILD|WS_VISIBLE|WS_TABSTOP|SS_CENTER,
  306. CRect(0,0,0,0), 
  307. &m_pMainFrame->m_wndStatusBar, 
  308. 0))
  309. {
  310. TRACE(_T("Failed to create label control.n"));
  311. return;
  312. }
  313. m_pWndLabel->SetFont(
  314. CFont::FromHandle(
  315. (HFONT)::GetStockObject(DEFAULT_GUI_FONT)
  316. )
  317. );
  318. bool bRet = m_pMainFrame->m_wndStatusBar.AddPane(IDS_PANE_LABEL,m_nPosition);
  319. if(!bRet){
  320. AfxMessageBox(_T("Pane index out of rangenor pane with same ID already exists in the status bar"), MB_ICONERROR);
  321. return;
  322. }
  323. int nIndex = m_pMainFrame->m_wndStatusBar.CommandToIndex(IDS_PANE_LABEL);
  324. if (nIndex == -1)
  325. return;
  326. m_pMainFrame->m_wndStatusBar.SetPaneWidth(nIndex, 70);
  327. m_pMainFrame->m_wndStatusBar.SetPaneControl(m_pWndLabel, IDS_PANE_LABEL, true);
  328. return;
  329. }
  330. if( m_wndRadioToolbar.GetCheck() ) // toolbar
  331. {
  332. m_pWndToolBar = new CExtStatusBarToolbar;
  333. if( (! m_pWndToolBar->Create(
  334. NULL,
  335. &m_pMainFrame->m_wndStatusBar,
  336. UINT(IDC_STATIC),
  337. WS_CHILD|WS_VISIBLE
  338. |CBRS_ALIGN_BOTTOM|CBRS_TOOLTIPS
  339. |CBRS_FLYBY|CBRS_SIZE_DYNAMIC
  340. ) )
  341. || (! m_pWndToolBar->LoadToolBar(IDR_TOOLBAR_SMALL_ICONS) )
  342. )
  343. {
  344. ASSERT( FALSE );
  345. return;
  346. }
  347. m_pWndToolBar->SetOwner( this );
  348. bool bRet = m_pMainFrame->m_wndStatusBar.AddPane(IDS_PANE_TOOLBAR,m_nPosition);
  349. if( !bRet )
  350. {
  351. AfxMessageBox(_T("Pane index out of rangenor pane with same ID already exists in the status bar"), MB_ICONERROR);
  352. return;
  353. }
  354. int nIndex = m_pMainFrame->m_wndStatusBar.CommandToIndex(IDS_PANE_TOOLBAR);
  355. if( nIndex == -1 )
  356. return;
  357. CSize szTBSize = m_pWndToolBar->CalcDynamicLayout( -1, LM_HORZ|LM_COMMIT );
  358. m_pMainFrame->m_wndStatusBar.SetPaneWidth( nIndex, szTBSize.cx );
  359. m_pMainFrame->m_wndStatusBar.SetPaneControl( m_pWndToolBar, IDS_PANE_TOOLBAR, true );
  360. return;
  361. }
  362. if( m_wndRadioZoom.GetCheck() ) // zoom
  363. {
  364. m_pWndZoomScrollBar = new CExtStatusBarZoomScrollBar;
  365. if( ! m_pWndZoomScrollBar->Create(
  366. WS_CHILD|WS_VISIBLE|SBS_HORZ,
  367. CRect(0,0,0,0),
  368. &m_pMainFrame->m_wndStatusBar,
  369. UINT(IDC_STATIC)
  370. )
  371. )
  372. {
  373. ASSERT( FALSE );
  374. return;
  375. }
  376. m_pWndZoomScrollBar->SetScrollRange( 0, 100 );
  377. m_pWndZoomScrollBar->SetScrollPos( 50 );
  378. m_pWndZoomScrollBar->m_bEnabledToolTips         = true;
  379. m_pWndZoomScrollBar->m_strTipTextForThumbButton = _T("Zoom");
  380. m_pWndZoomScrollBar->m_strTipTextForUpButton    = _T("Zoom Out");
  381. m_pWndZoomScrollBar->m_strTipTextForDownButton  = _T("Zoom In");
  382. m_pWndZoomScrollBar->m_eSO = CExtScrollBar::__ESO_BOTTOM;
  383. m_pWndZoomScrollBar->SetOwner( this );
  384. bool bRet = m_pMainFrame->m_wndStatusBar.AddPane( IDS_PANE_ZOOM, m_nPosition );
  385. if( !bRet )
  386. {
  387. AfxMessageBox(_T("Pane index out of rangenor pane with same ID already exists in the status bar"), MB_ICONERROR);
  388. return;
  389. }
  390. int nIndex = m_pMainFrame->m_wndStatusBar.CommandToIndex(IDS_PANE_ZOOM);
  391. if( nIndex == -1 )
  392. return;
  393. m_pMainFrame->m_wndStatusBar.SetPaneWidth( nIndex, 120 );
  394. m_pMainFrame->m_wndStatusBar.SetPaneControl( m_pWndZoomScrollBar, IDS_PANE_ZOOM, true );
  395. return;
  396. }
  397. if( m_wndRadioScrollBar.GetCheck() ) // scrollbar
  398. {
  399. m_pWndScrollBar = new CExtStatusBarScrollBar;
  400. if( ! m_pWndScrollBar->Create(
  401. WS_CHILD|WS_VISIBLE|SBS_HORZ,
  402. CRect(0,0,0,0),
  403. &m_pMainFrame->m_wndStatusBar,
  404. UINT(IDC_STATIC)
  405. )
  406. )
  407. {
  408. ASSERT( FALSE );
  409. return;
  410. }
  411. m_pWndScrollBar->SetScrollRange( 0, 100 );
  412. m_pWndScrollBar->SetScrollPos( 50 );
  413. m_pWndScrollBar->m_bEnabledToolTips          = true;
  414. m_pWndScrollBar->m_strTipTextForThumbButton  = _T("Scroll");
  415. m_pWndScrollBar->m_strTipTextForUpButton     = _T("Scroll Left");
  416. m_pWndScrollBar->m_strTipTextForDownButton   = _T("Scroll Right");
  417. m_pWndScrollBar->m_strTipTextForPageUpArea   = _T("Page Up");
  418. m_pWndScrollBar->m_strTipTextForPageDownArea = _T("Page Down");
  419. m_pWndScrollBar->m_eSO = CExtScrollBar::__ESO_BOTTOM;
  420. m_pWndScrollBar->SetOwner( this );
  421. bool bRet = m_pMainFrame->m_wndStatusBar.AddPane( IDS_PANE_SCROLLBAR, m_nPosition );
  422. if( !bRet )
  423. {
  424. AfxMessageBox(_T("Pane index out of rangenor pane with same ID already exists in the status bar"), MB_ICONERROR);
  425. return;
  426. }
  427. int nIndex = m_pMainFrame->m_wndStatusBar.CommandToIndex(IDS_PANE_SCROLLBAR);
  428. if( nIndex == -1 )
  429. return;
  430. m_pMainFrame->m_wndStatusBar.SetPaneWidth( nIndex, 120 );
  431. m_pMainFrame->m_wndStatusBar.SetPaneControl( m_pWndScrollBar, IDS_PANE_SCROLLBAR, true );
  432. return;
  433. }
  434. }
  435. //////////////////////////////////////////////////////////////////////////
  436. void CChildFormView::OnRemovePane() 
  437. {
  438. UpdateData();
  439. if( m_nPosition < 0 || m_nPosition > 20 )
  440. return;
  441. if(!m_pMainFrame->m_wndStatusBar.RemovePane(
  442. m_pMainFrame->m_wndStatusBar.GetItemID(m_nPosition))
  443. )
  444. {
  445. CString s;
  446. s.Format(_T("Pane %d was not found in the status bar nor must be at least one of them."), m_nPosition);
  447. AfxMessageBox(s, MB_ICONERROR);
  448. }
  449. }
  450. //////////////////////////////////////////////////////////////////////////
  451. void CChildFormView::OnStatusBarButton() 
  452. {
  453. AfxMessageBox(_T("StatusBar Button Clicked."));
  454. }
  455. //////////////////////////////////////////////////////////////////////////
  456. void CChildFormView::OnDisablePane() 
  457. {
  458. UpdateData();
  459. if( m_nPosition < 0 || m_nPosition > 20 )
  460. return;
  461. UINT nID, nStyle;
  462. int cxWidth;
  463. m_pMainFrame->m_wndStatusBar.GetPaneInfo(m_nPosition, nID, nStyle, cxWidth);
  464. bool bDisabled = ((nStyle&SBPS_DISABLED) == 0);
  465. m_pMainFrame->m_wndStatusBar.SetPaneStyle(
  466. m_nPosition,
  467. //nID,
  468. bDisabled 
  469. ? nStyle | SBPS_DISABLED 
  470. : nStyle & ~SBPS_DISABLED
  471. //`cxWidth
  472. );
  473. }
  474. //////////////////////////////////////////////////////////////////////////
  475. void CChildFormView::CheckControls()
  476. {
  477. if( ! m_bInitComplete )
  478. return;
  479. UpdateData();
  480. if( m_nPosition < 0 )
  481. {
  482. m_nPosition = 0;
  483. UpdateData(0);
  484. return;
  485. }
  486. // if( m_nPosition > 20 )
  487. // {
  488. // m_nPosition = 20;
  489. // UpdateData(0);
  490. // return;
  491. // }
  492. int nCount = m_pMainFrame->m_wndStatusBar.GetPaneCount();
  493. if( m_nPosition >= nCount )
  494. {
  495. m_btnDisablePane.EnableWindow(FALSE);
  496. m_btnRemovePane.EnableWindow(FALSE);
  497. if( m_nPosition != nCount ){
  498. m_btnAddPane.EnableWindow(FALSE);
  499. return;
  500. }
  501. }
  502. else
  503. {
  504. m_btnDisablePane.EnableWindow(TRUE);
  505. m_btnRemovePane.EnableWindow(TRUE);
  506. }
  507. bool bFinded = false;
  508. int i=0;
  509. if( m_wndRadioText.GetCheck() ){
  510. for(i=0; i<m_pMainFrame->m_wndStatusBar.GetPaneCount(); i++)
  511. if( IDS_PANE_TEXT == m_pMainFrame->m_wndStatusBar.GetItemID(i) ){
  512. bFinded = true;
  513. break;
  514. }
  515. }
  516. if( m_wndRadioEdit.GetCheck() ){
  517. for(i=0; i<m_pMainFrame->m_wndStatusBar.GetPaneCount(); i++)
  518. if( IDS_PANE_EDIT == m_pMainFrame->m_wndStatusBar.GetItemID(i) ){
  519. bFinded = true;
  520. break;
  521. }
  522. }
  523. if( m_wndRadioProgress.GetCheck() ){
  524. for(i=0; i<m_pMainFrame->m_wndStatusBar.GetPaneCount(); i++)
  525. if( IDS_PANE_PROGRESS == m_pMainFrame->m_wndStatusBar.GetItemID(i) ){
  526. bFinded = true;
  527. break;
  528. }
  529. }
  530. if( m_wndRadioSlider.GetCheck() ){
  531. for(i=0; i<m_pMainFrame->m_wndStatusBar.GetPaneCount(); i++)
  532. if( IDS_PANE_SLIDER_CTRL == m_pMainFrame->m_wndStatusBar.GetItemID(i) ){
  533. bFinded = true;
  534. break;
  535. }
  536. }
  537. if( m_wndRadioButton.GetCheck() ){
  538. for(i=0; i<m_pMainFrame->m_wndStatusBar.GetPaneCount(); i++)
  539. if( IDS_PANE_BUTTON == m_pMainFrame->m_wndStatusBar.GetItemID(i) ){
  540. bFinded = true;
  541. break;
  542. }
  543. }
  544. if( m_wndRadioAnimCtrl.GetCheck() ){
  545. for(i=0; i<m_pMainFrame->m_wndStatusBar.GetPaneCount(); i++)
  546. if( IDS_PANE_ANIMATE == m_pMainFrame->m_wndStatusBar.GetItemID(i) ){
  547. bFinded = true;
  548. break;
  549. }
  550. }
  551. if( m_wndRadioStatic.GetCheck() ){
  552. for(i=0; i<m_pMainFrame->m_wndStatusBar.GetPaneCount(); i++)
  553. if( IDS_PANE_LABEL == m_pMainFrame->m_wndStatusBar.GetItemID(i) ){
  554. bFinded = true;
  555. break;
  556. }
  557. }
  558. if( m_wndRadioToolbar.GetCheck() ){
  559. for(i=0; i<m_pMainFrame->m_wndStatusBar.GetPaneCount(); i++)
  560. if( IDS_PANE_TOOLBAR == m_pMainFrame->m_wndStatusBar.GetItemID(i) ){
  561. bFinded = true;
  562. break;
  563. }
  564. }
  565. if( m_wndRadioZoom.GetCheck() ){
  566. for(i=0; i<m_pMainFrame->m_wndStatusBar.GetPaneCount(); i++)
  567. if( IDS_PANE_ZOOM == m_pMainFrame->m_wndStatusBar.GetItemID(i) ){
  568. bFinded = true;
  569. break;
  570. }
  571. }
  572. if( m_wndRadioScrollBar.GetCheck() ){
  573. for(i=0; i<m_pMainFrame->m_wndStatusBar.GetPaneCount(); i++)
  574. if( IDS_PANE_SCROLLBAR == m_pMainFrame->m_wndStatusBar.GetItemID(i) ){
  575. bFinded = true;
  576. break;
  577. }
  578. }
  579. m_btnAddPane.EnableWindow( !bFinded );
  580. }
  581. BOOL CChildFormView::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) 
  582. {
  583. BOOL bRetVal = CFormView::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
  584. if( nCode == CN_COMMAND && pExtra == NULL
  585. && ( nID == IDC_POSITION
  586. || nID == IDC_SPIN_POSITION
  587. || nID == IDC_ADD_PANE
  588. || nID == IDC_REMOVE_PANE
  589. || nID == IDC_DISABLE_PANE
  590. || nID == IDC_RADIO_TYPE_TEXT
  591. || nID == IDC_RADIO_TYPE_EDIT
  592. || nID == IDC_RADIO_TYPE_PROGRESS
  593. || nID == IDC_RADIO_TYPE_SLIDER
  594. || nID == IDC_RADIO_TYPE_BUTTON
  595. || nID == IDC_RADIO_TYPE_ANIM_CTRL
  596. || nID == IDC_RADIO_TYPE_STATIC
  597. || nID == IDC_RADIO_TYPE_TOOLBAR
  598. || nID == IDC_RADIO_TYPE_ZOOM
  599. || nID == IDC_RADIO_TYPE_SCROLLBAR
  600. )
  601. )
  602. CheckControls();
  603. if( nCode == CN_UPDATE_COMMAND_UI
  604. && ( nID == ID_CMD_NAVIGATE_TOP
  605. || nID == ID_CMD_NAVIGATE_BOTTOM
  606. || nID == ID_CMD_NAVIGATE_FOCUS 
  607. || nID == ID_CMD_NAVIGATE_PAGE_UP
  608. || nID == ID_CMD_NAVIGATE_PAGE_DOWN
  609. )
  610. )
  611. {
  612. CCmdUI * pCmdUI = (CCmdUI *)pExtra;
  613. ASSERT( pCmdUI != NULL );
  614. pCmdUI->Enable();
  615. return TRUE;
  616. }
  617. return bRetVal;
  618. }
  619. void CChildFormView::OnSize(UINT nType, int cx, int cy) 
  620. {
  621. CView::OnSize(nType, cx, cy);
  622. }
  623. void CChildFormView::OnUpdateStatusBarButton(CCmdUI* pCmdUI) 
  624. {
  625. if( m_pWndButton && ::IsWindow(m_pWndButton->m_hWnd))
  626. {
  627. pCmdUI->Enable( m_pWndButton->IsWindowEnabled() );
  628. }
  629. }
  630. void CChildFormView::OnUpdateStatusBarProgress(CCmdUI* pCmdUI) 
  631. {
  632. if( m_pWndProgressCtrl && ::IsWindow(m_pWndProgressCtrl->m_hWnd))
  633. {
  634. pCmdUI->Enable( m_pWndProgressCtrl->IsWindowEnabled() );
  635. }
  636. }
  637. void CChildFormView::OnUpdateStatusBarAnimate(CCmdUI* pCmdUI) 
  638. {
  639. if( m_pWndAnimateCtrl && ::IsWindow(m_pWndAnimateCtrl->m_hWnd))
  640. {
  641. static BOOL bEnabledPrev = true;
  642. BOOL bEnabled = m_pWndAnimateCtrl->IsWindowEnabled();
  643. if( bEnabled != bEnabledPrev )
  644. {
  645. bEnabled 
  646. ? m_pWndAnimateCtrl->Open(IDR_DOWNLOAD)
  647. : m_pWndAnimateCtrl->Stop();
  648. pCmdUI->Enable( bEnabled );
  649. bEnabledPrev = bEnabled;
  650. }
  651. }
  652. }
  653. void CChildFormView::OnChangePosition() 
  654. {
  655. ASSERT_VALID( this );
  656. CheckControls();
  657. }
  658. /////////////////////////////////////////////////////////////////////////////
  659. // CExtStatusBarSliderCtrl
  660. BEGIN_MESSAGE_MAP(CExtStatusBarSliderCtrl, CExtSliderWnd)
  661. //{{AFX_MSG_MAP(CExtStatusBarSliderCtrl)
  662. ON_WM_CTLCOLOR_REFLECT()
  663. //}}AFX_MSG_MAP
  664. END_MESSAGE_MAP()
  665. HBRUSH CExtStatusBarSliderCtrl::CtlColor(CDC* pDC, UINT nCtlColor) 
  666. {
  667. ASSERT_VALID( this );
  668. if( nCtlColor == CTLCOLOR_STATIC )
  669. {
  670. COLORREF clrBk = GetBkColor();
  671. CRect rcClient;
  672. GetClientRect( &rcClient );
  673. CBitmap bmpGradient;
  674. if( bmpGradient.CreateCompatibleBitmap( 
  675. pDC, 
  676. rcClient.Width(), 
  677. rcClient.Height() 
  678. )
  679. {
  680. CBitmap * pBmpOld = pDC->SelectObject( &bmpGradient );
  681. bool bTransparent = false;
  682. if( clrBk == COLORREF(-1L) )
  683. {
  684. CExtStatusControlBar * pWndParent = 
  685. DYNAMIC_DOWNCAST( CExtStatusControlBar, GetParent() );
  686. ASSERT( pWndParent != NULL );
  687. CRect rcPaint;
  688. pWndParent->GetWindowRect( &rcPaint );
  689. ScreenToClient( &rcPaint );
  690. CRect _rcClient( rcClient );
  691. ClientToScreen( &_rcClient );
  692. pWndParent->ScreenToClient( &_rcClient );
  693. if( pWndParent->m_bCompleteRepaint )
  694. {
  695. pDC->OffsetViewportOrg( 
  696. _rcClient.left, 
  697. );
  698. bool bRet = 
  699. PmBridge_GetPM()->StatusBar_EraseBackground(
  700. *pDC,
  701. rcPaint,
  702. pWndParent
  703. );
  704. pDC->OffsetViewportOrg( 
  705. -_rcClient.left, 
  706. );
  707. if( !bRet )
  708. {
  709. bool bTransparent = false;
  710. if( PmBridge_GetPM()->GetCb2DbTransparentMode(pWndParent) )
  711. {
  712. if( PmBridge_GetPM()->PaintDockerBkgnd( true, *pDC, this ) )
  713. bTransparent = true;
  714. }
  715. if( ! bTransparent )
  716. pDC->FillSolidRect( 
  717. &rcPaint, 
  718. PmBridge_GetPM()->GetColor( CExtPaintManager::CLR_3DFACE_OUT, pWndParent ) 
  719. );
  720. }
  721. INT nIndex = pWndParent->CommandToIndex( IDS_PANE_LABEL );
  722. if( nIndex >= 0 )
  723. {
  724. pDC->OffsetViewportOrg( 
  725. _rcClient.left, 
  726. );
  727. PmBridge_GetPM()->StatusBar_ErasePaneBackground(
  728. *pDC,
  729. nIndex,
  730. rcPaint,
  731. pWndParent
  732. );
  733. pDC->OffsetViewportOrg( 
  734. -_rcClient.left, 
  735. );
  736. bTransparent = true;
  737. }
  738. } // if( pWndParent->m_bCompleteRepaint )
  739. }
  740. pDC->SelectObject( pBmpOld );
  741. if( bTransparent )
  742. {
  743. if( m_brBack.GetSafeHandle() != NULL )
  744. m_brBack.DeleteObject();
  745. if( m_brBack.CreatePatternBrush( &bmpGradient ) )
  746. {
  747. m_clrBackgroundPrev = NULL;
  748. return m_brBack;
  749. }
  750. }
  751. }
  752. if( clrBk == COLORREF(-1L) )
  753. clrBk = PmBridge_GetPM()->GetColor( CExtPaintManager::CLR_3DFACE_OUT, this );
  754. if( m_clrBackgroundPrev != clrBk )
  755. {
  756. if( m_brBack.GetSafeHandle() != NULL )
  757. m_brBack.DeleteObject();
  758. m_brBack.CreateSolidBrush( clrBk );
  759. m_clrBackgroundPrev = clrBk;
  760. }
  761. return m_brBack;
  762. }
  763. else
  764. return (HBRUSH)Default();
  765. }
  766. /////////////////////////////////////////////////////////////////////////////
  767. // CExtStatusBarAnimateCtrl
  768. IMPLEMENT_DYNCREATE( CExtStatusBarAnimateCtrl, CAnimateCtrl );
  769. CExtStatusBarAnimateCtrl::CExtStatusBarAnimateCtrl()
  770. : m_clrBackgroundPrev( COLORREF(-1L) )
  771. {
  772. }
  773. CExtStatusBarAnimateCtrl::~CExtStatusBarAnimateCtrl()
  774. {
  775. if( m_brBack.GetSafeHandle() != NULL )
  776. m_brBack.DeleteObject();
  777. }
  778. BEGIN_MESSAGE_MAP(CExtStatusBarAnimateCtrl, CAnimateCtrl)
  779. //{{AFX_MSG_MAP(CExtStatusBarAnimateCtrl)
  780. ON_WM_CTLCOLOR_REFLECT()
  781. //}}AFX_MSG_MAP
  782. END_MESSAGE_MAP()
  783. HBRUSH CExtStatusBarAnimateCtrl::CtlColor(CDC* pDC, UINT nCtlColor) 
  784. {
  785. ASSERT_VALID( this );
  786. pDC;
  787. if( nCtlColor == CTLCOLOR_STATIC )
  788. {
  789. COLORREF clrBk = g_PaintManager->GetColor( CExtPaintManager::CLR_3DFACE_OUT, this );
  790. if( m_clrBackgroundPrev != clrBk )
  791. {
  792. if( m_brBack.GetSafeHandle() != NULL )
  793. m_brBack.DeleteObject();
  794. m_brBack.CreateSolidBrush( clrBk );
  795. m_clrBackgroundPrev = clrBk;
  796. }
  797. return m_brBack;
  798. }
  799. else
  800. return (HBRUSH)Default();
  801. }