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

界面编程

开发平台:

Visual C++

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