SkinProgressTestView.cpp
上传用户:jmtfjn
上传日期:2007-02-20
资源大小:85k
文件大小:14k
源码类别:

状态条

开发平台:

Visual C++

  1. // SkinProgressTestView.cpp : implementation of the CSkinProgressTestView class
  2. //
  3. #include "stdafx.h"
  4. #include "SkinProgressTest.h"
  5. #include "SkinProgressTestDoc.h"
  6. #include "SkinProgressTestView.h"
  7. #ifdef dCSP_DIALOG_PROGRESS
  8. #include "SkinProgressTestDialog.h"
  9. #endif // dCSP_DIALOG_PROGRESS
  10. #ifdef _DEBUG
  11. #define new DEBUG_NEW
  12. #undef THIS_FILE
  13. static char THIS_FILE[] = __FILE__;
  14. #endif
  15. /////////////////////////////////////////////////////////////////////////////
  16. // CSkinProgressTestView
  17. IMPLEMENT_DYNCREATE(CSkinProgressTestView, CFormView)
  18. BEGIN_MESSAGE_MAP(CSkinProgressTestView, CFormView)
  19. //{{AFX_MSG_MAP(CSkinProgressTestView)
  20. ON_BN_CLICKED(IDC_BUTTON_TEST, OnButtonTest)
  21. ON_BN_CLICKED(IDC_RADIO_DEFAULT, OnRadioDefault)
  22. ON_BN_CLICKED(IDC_RADIO_AQUA, OnRadioAqua)
  23. ON_BN_CLICKED(IDC_RADIO_LUNA, OnRadioLuna)
  24. ON_BN_CLICKED(IDC_RADIO_PHOTON, OnRadioPhoton)
  25. ON_WM_SIZE()
  26. #ifdef dCSP_DIALOG_PROGRESS
  27. ON_BN_CLICKED(IDC_BUTTON_DIALOG, OnButtonDialog)
  28. #endif // dCSP_DIALOG_PROGRESS
  29. ON_CBN_SELCHANGE(IDC_COMBO_PROGRESS, OnSelchangeComboProgress)
  30. //}}AFX_MSG_MAP
  31. END_MESSAGE_MAP()
  32. /////////////////////////////////////////////////////////////////////////////
  33. // CSkinProgressTestView construction/destruction
  34. CSkinProgressTestView::CSkinProgressTestView()
  35. : CFormView(CSkinProgressTestView::IDD)
  36. {
  37. //{{AFX_DATA_INIT(CSkinProgressTestView)
  38. m_nLimit = 30000;
  39. m_nPane = 0;
  40. m_nSize = 200;
  41. m_strText = _T("This text allows to test the text wrapping");
  42. m_bCheckReverse = FALSE;
  43. //}}AFX_DATA_INIT
  44. // TODO: add construction code here
  45.   m_poSkinProgress = NULL;
  46. }
  47. CSkinProgressTestView::~CSkinProgressTestView()
  48. {
  49. //  if(
  50. //         (m_poSkinProgress != NULL)
  51. //      && (IsWindow(m_poSkinProgress->m_hWnd))
  52. //    )
  53. //  {
  54. //    delete m_poSkinProgress;
  55. //    m_poSkinProgress = NULL;
  56. //  }else{}  
  57. }
  58. void CSkinProgressTestView::DoDataExchange(CDataExchange* pDX)
  59. {
  60. CFormView::DoDataExchange(pDX);
  61. //{{AFX_DATA_MAP(CSkinProgressTestView)
  62. DDX_Control(pDX, IDC_HEAD_REVERSE, m_cHeadReverse);
  63. DDX_Control(pDX, IDC_CHECK_REVERSE, m_cCheckReverse);
  64. DDX_Control(pDX, IDC_BUTTON_DIALOG, m_cButtonDialog);
  65. DDX_Control(pDX, IDC_PANE4, m_cPane4);
  66. DDX_Control(pDX, IDC_PANE3, m_cPane3);
  67. DDX_Control(pDX, IDC_PANE2, m_cPane2);
  68. DDX_Control(pDX, IDC_PANE1, m_cPane1);
  69. DDX_Control(pDX, IDC_PANE0, m_cPane0);
  70. DDX_Control(pDX, IDC_BOTTOM_RIGHT, m_cBottomRight);
  71. DDX_Control(pDX, IDC_COMBO_PROGRESS, m_cProgress);
  72. DDX_Control(pDX, IDC_SPIN_SIZE, m_cSize);
  73. DDX_Control(pDX, IDC_SPIN_PANE, m_cPane);
  74. DDX_Control(pDX, IDC_SPIN_LIMIT, m_cLimit);
  75. DDX_Control(pDX, IDC_BUTTON_TEST, m_cButtonTest);
  76. DDX_Text(pDX, IDC_EDIT_LIMIT, m_nLimit);
  77. DDV_MinMaxInt(pDX, m_nLimit, 1, 65535);
  78. DDX_Text(pDX, IDC_EDIT_PANE, m_nPane);
  79. DDV_MinMaxInt(pDX, m_nPane, 0, 4);
  80. DDX_Text(pDX, IDC_EDIT_SIZE, m_nSize);
  81. DDV_MinMaxInt(pDX, m_nSize, -1280, 1280);
  82. DDX_Text(pDX, IDC_EDIT_TEXT, m_strText);
  83. DDV_MaxChars(pDX, m_strText, 256);
  84. DDX_Check(pDX, IDC_CHECK_REVERSE, m_bCheckReverse);
  85. //}}AFX_DATA_MAP
  86. }
  87. BOOL CSkinProgressTestView::PreCreateWindow(CREATESTRUCT& cs)
  88. {
  89. // TODO: Modify the Window class or styles here by modifying
  90. //  the CREATESTRUCT cs
  91. return CFormView::PreCreateWindow(cs);
  92. }
  93. void CSkinProgressTestView::OnInitialUpdate()
  94. {
  95.   // Init
  96.   // Process
  97. CFormView::OnInitialUpdate();
  98. GetParentFrame()->RecalcLayout();
  99. ResizeParentToFit();
  100.   // Select AUTOSIZE
  101.   m_cProgress.SetCurSel(6);
  102.   // Select Default bitmap
  103.   CheckRadioButton(IDC_RADIO_DEFAULT, IDC_RADIO_PHOTON, IDC_RADIO_DEFAULT);
  104.   // Select Size
  105.   m_cSize.SetRange32(-1280, 1280);
  106.   m_cSize.SetPos(200);
  107.   // Select Limit
  108.   m_cLimit.SetRange32(1, 65535);
  109.   m_cLimit.SetPos(30000);
  110.   // Select Pane
  111.   m_cPane.SetRange32(0, 4);
  112.   m_cPane.SetPos(0);
  113.   // Don't reverse the bitmap
  114.   m_bCheckReverse = false;
  115. #ifdef dCSP_DIALOG_PROGRESS
  116.   m_cButtonDialog.EnableWindow(true);
  117. #else
  118.   m_cButtonDialog.EnableWindow(false);
  119. #endif // dCSP_DIALOG_PROGRESS
  120. #ifdef dCSP_SLIDERBAR_METHOD
  121.   m_cHeadReverse.EnableWindow(true);
  122.   m_cCheckReverse.EnableWindow(true);
  123. #else
  124.   m_cHeadReverse.EnableWindow(false);
  125.   m_cCheckReverse.EnableWindow(false);
  126. #endif // dCSP_SLIDERBAR_METHOD
  127.   // Shows pane text
  128.   m_cPane0.ShowWindow(SW_SHOW);
  129.   m_cPane1.ShowWindow(SW_SHOW);
  130.   m_cPane2.ShowWindow(SW_SHOW);
  131.   m_cPane3.ShowWindow(SW_SHOW);
  132.   m_cPane4.ShowWindow(SW_SHOW);
  133. }
  134. /////////////////////////////////////////////////////////////////////////////
  135. // CSkinProgressTestView diagnostics
  136. #ifdef _DEBUG
  137. void CSkinProgressTestView::AssertValid() const
  138. {
  139. CFormView::AssertValid();
  140. }
  141. void CSkinProgressTestView::Dump(CDumpContext& dc) const
  142. {
  143. CFormView::Dump(dc);
  144. }
  145. CSkinProgressTestDoc* CSkinProgressTestView::GetDocument() // non-debug version is inline
  146. {
  147. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSkinProgressTestDoc)));
  148. return (CSkinProgressTestDoc*)m_pDocument;
  149. }
  150. #endif //_DEBUG
  151. /////////////////////////////////////////////////////////////////////////////
  152. // CSkinProgressTestView message handlers
  153. void CSkinProgressTestView::OnButtonTest() 
  154. {
  155. // TODO: Add your control notification handler code here
  156.   UpdateData(true); // Update variables
  157.   m_cButtonTest.EnableWindow(false); // Disable the 'TEST' button
  158.   CBitmap* poBitmap = NULL;
  159.   // Select the bitmap
  160.   int nCheckedRadio = GetCheckedRadioButton(IDC_RADIO_DEFAULT, IDC_RADIO_PHOTON);
  161.   switch(nCheckedRadio)
  162.   {
  163.     case IDC_RADIO_DEFAULT :
  164.       poBitmap = NULL;
  165.       break;
  166.     case IDC_RADIO_AQUA :
  167.       poBitmap = new CBitmap();
  168.       poBitmap->LoadBitmap(IDB_BMP_AQUA);
  169.       break;
  170.     case IDC_RADIO_LUNA :
  171.       poBitmap = new CBitmap();
  172.       poBitmap->LoadBitmap(IDB_BMP_LUNA);
  173.       break;
  174.     case IDC_RADIO_PHOTON :
  175.       poBitmap = new CBitmap();
  176.       poBitmap->LoadBitmap(IDB_BMP_PHOTON);
  177.       break;
  178.     default :
  179.       poBitmap = NULL;
  180.       break;
  181.   }
  182. //  m_poSkinProgress = new CSkinProgress(m_strText, m_nSize, m_nLimit, m_nPane, m_cProgress.GetCurSel(), poBitmap
  183. //#ifdef dCSP_SLIDERBAR_METHOD
  184. //    ,m_bCheckReverse
  185. //#endif // dCSP_SLIDERBAR_METHOD
  186. //  );
  187.   { // Direct creation (instead of using pointer) - the CSkinProgress object only exists between the brakets
  188.     CSkinProgress SkinProgress
  189.     (
  190.       m_strText,
  191.       m_nLimit,
  192.       m_cProgress.GetCurSel() - (cSPT_EnumElements - 1),
  193.       m_nPane,
  194.       m_nSize,
  195.       poBitmap
  196. #ifdef dCSP_SLIDERBAR_METHOD
  197.       ,m_bCheckReverse
  198. #endif // dCSP_SLIDERBAR_METHOD
  199.     );
  200.     m_poSkinProgress = &SkinProgress; // For event management, see below, [OnRadioDefault] -> [OnRadioPhoton]
  201. /*
  202. // dCSP_TIMED_REDRAW test purpose
  203.     SYSTEMTIME     TimeIn;
  204.     FILETIME       TimeOut;
  205.    
  206.     ULARGE_INTEGER TimeOne;
  207.     ULARGE_INTEGER TimeTwo;
  208.     GetLocalTime(&TimeIn);
  209.     SystemTimeToFileTime(&TimeIn, &TimeOut);
  210.     TimeOne.QuadPart   = TimeOut.dwHighDateTime;
  211.     TimeOne.QuadPart <<= 32;
  212.     TimeOne.QuadPart  |= TimeOut.dwLowDateTime;
  213. */
  214.   for(int i = 0; i < m_nLimit; i += 1)
  215.     {
  216. /*
  217. // dCSP_TIMED_REDRAW test purpose
  218.       TimeOne.QuadPart += 5;
  219.       do
  220.       {
  221.         GetLocalTime(&TimeIn);
  222.         SystemTimeToFileTime(&TimeIn, &TimeOut);
  223.         TimeTwo.QuadPart   = TimeOut.dwHighDateTime;
  224.         TimeTwo.QuadPart <<= 32;
  225.         TimeTwo.QuadPart  |= TimeOut.dwLowDateTime;
  226.       }
  227.       while(TimeTwo.QuadPart < TimeOne.QuadPart);
  228.       TimeOne = TimeTwo;
  229. */
  230.     SkinProgress.StepIt();
  231. #ifdef dCSP_SLIDERBAR_METHOD
  232. //      SkinProgress.SetStart(i >> 1);
  233. #endif // dCSP_SLIDERBAR_METHOD
  234.     PeekAndPump();
  235.   }
  236.     m_poSkinProgress = NULL;
  237.   } // Here the CSkinProgress is deleted
  238.   // Use this for testing the way to make a CSkinProgress living as a pointer - CHANGE THE CSkinProgressTestView DESTRUCTOR ABOVE !!!
  239. //  if(
  240. //         (m_poSkinProgress != NULL)
  241. //      && (IsWindow(m_poSkinProgress->m_hWnd))
  242. //    )
  243. //  { // If you close the application while the bar is in progress, the objects are already deleted, so avoid to delete a deleted object
  244. //    delete m_poSkinProgress;
  245. //    m_poSkinProgress = NULL;
  246. //  }else{}  
  247.   if(poBitmap != NULL)
  248.   {
  249.     delete poBitmap;
  250.   }else{}  
  251.   if(IsWindow(m_cButtonTest.m_hWnd))
  252.   { // If you close the application while the bar is in progress, the objects are already deleted, so avoid to enable a deleted object
  253.     m_cButtonTest.EnableWindow(true); 
  254.   }else{}
  255. }
  256. void CSkinProgressTestView::OnRadioDefault() 
  257. { // Set the Default bitmap
  258. //  CheckRadioButton(IDC_RADIO_DEFAULT, IDC_RADIO_PHOTON, IDC_RADIO_DEFAULT);
  259.   if(m_poSkinProgress != NULL)
  260.   {
  261.     m_poSkinProgress->SetBitmap(); // Default bitmap
  262.   }else{}
  263. }
  264. void CSkinProgressTestView::OnRadioAqua() 
  265. { // Set the AQUA bitmap
  266. //  CheckRadioButton(IDC_RADIO_DEFAULT, IDC_RADIO_PHOTON, IDC_RADIO_AQUA);
  267.   if(m_poSkinProgress != NULL)
  268.   {
  269.     CBitmap oBitmap;
  270.     oBitmap.LoadBitmap(IDB_BMP_AQUA);
  271.     m_poSkinProgress->SetBitmap(&oBitmap);
  272.   }else{}
  273. }
  274. void CSkinProgressTestView::OnRadioLuna() 
  275. { // Set the LUNA bitmap
  276. //  CheckRadioButton(IDC_RADIO_DEFAULT, IDC_RADIO_PHOTON, IDC_RADIO_LUNA);
  277.   if(m_poSkinProgress != NULL)
  278.   {
  279.     CBitmap oBitmap;
  280.     oBitmap.LoadBitmap(IDB_BMP_LUNA);
  281.     m_poSkinProgress->SetBitmap(&oBitmap);
  282.   }else{}
  283. }
  284. void CSkinProgressTestView::OnRadioPhoton() 
  285. { // Set the PHOTON bitmap
  286. //  CheckRadioButton(IDC_RADIO_DEFAULT, IDC_RADIO_PHOTON, IDC_RADIO_PHOTON);
  287.   if(m_poSkinProgress != NULL)
  288.   {
  289.     CBitmap oBitmap;
  290.     oBitmap.LoadBitmap(IDB_BMP_PHOTON);
  291.     m_poSkinProgress->SetBitmap(&oBitmap);
  292.   }else{}
  293. }
  294. void CSkinProgressTestView::OnSize(UINT nType, int cx, int cy) 
  295. { // On resizing
  296.   CView::OnSize(nType, cx, cy);
  297.   CWnd*       pMainWnd;
  298.   CWnd*       pMessageBar;
  299.   CRect       rcWindow;
  300.   CRect       rcPane;
  301.   CRect       rcSetPane;
  302.   pMainWnd = AfxGetMainWnd();
  303.   if(pMainWnd != NULL)
  304.   { // If the window exists
  305.     if(pMainWnd->IsKindOf(RUNTIME_CLASS(CFrameWnd)))
  306.     { // If main window is a frame window, use normal methods
  307.       pMessageBar = ((CFrameWnd*) pMainWnd)->GetMessageBar();
  308.       // Get coordinate of the most bottom-right object
  309.       m_cBottomRight.GetWindowRect(rcWindow);
  310.       m_cPane0.GetWindowRect(rcPane);
  311.       ScreenToClient(rcWindow);
  312.       ScreenToClient(rcPane);
  313.       // Set minimal frame window size
  314.       ((CMainFrame*) AfxGetMainWnd())->m_nWidth  = rcWindow.right  + rcWindow.Width();
  315.       ((CMainFrame*) AfxGetMainWnd())->m_nHeight = rcWindow.bottom + rcWindow.Height() + rcPane.Height() + rcPane.Height() + rcPane.Height();
  316.       if(pMessageBar->IsWindowVisible())
  317.       {
  318.         // Relocate pane text 0
  319.         ((CStatusBar*) pMessageBar)->GetItemRect(0, rcWindow);
  320.         rcSetPane.left   = (rcWindow.left + rcWindow.right - rcPane.Width()) / 2;
  321.         rcSetPane.right  = rcSetPane.left + rcPane.Width();
  322.         rcSetPane.top    = cy - rcPane.Height();
  323.         rcSetPane.bottom = cy;
  324.         m_cPane0.MoveWindow(rcSetPane);
  325.         m_cPane0.ShowWindow(SW_SHOW);
  326.         // Relocate pane text 1
  327.         m_cPane1.GetWindowRect(rcPane);
  328.         ScreenToClient(rcPane);
  329.         ((CStatusBar*) pMessageBar)->GetItemRect(1, rcWindow);
  330.         rcSetPane.left   = (rcWindow.left + rcWindow.right - rcPane.Width()) / 2;
  331.         rcSetPane.right  = rcSetPane.left + rcPane.Width();
  332.         rcSetPane.top    = cy - rcPane.Height();
  333.         rcSetPane.bottom = cy;
  334.         m_cPane1.MoveWindow(rcSetPane);
  335.         m_cPane1.ShowWindow(SW_SHOW);
  336.         // Relocate pane text 2
  337.         m_cPane2.GetWindowRect(rcPane);
  338.         ScreenToClient(rcPane);
  339.         ((CStatusBar*) pMessageBar)->GetItemRect(2, rcWindow);
  340.         rcSetPane.left   = (rcWindow.left + rcWindow.right - rcPane.Width()) / 2;
  341.         rcSetPane.right  = rcSetPane.left + rcPane.Width();
  342.         rcSetPane.top    = cy - rcPane.Height();
  343.         rcSetPane.bottom = cy;
  344.         m_cPane2.MoveWindow(rcSetPane);
  345.         m_cPane2.ShowWindow(SW_SHOW);
  346.         // Relocate pane text 3
  347.         m_cPane3.GetWindowRect(rcPane);
  348.         ScreenToClient(rcPane);
  349.         ((CStatusBar*) pMessageBar)->GetItemRect(3, rcWindow);
  350.         rcSetPane.left   = (rcWindow.left + rcWindow.right - rcPane.Width()) / 2;
  351.         rcSetPane.right  = rcSetPane.left + rcPane.Width();
  352.         rcSetPane.top    = cy - rcPane.Height();
  353.         rcSetPane.bottom = cy;
  354.         m_cPane3.MoveWindow(rcSetPane);
  355.         m_cPane3.ShowWindow(SW_SHOW);
  356.         // Relocate pane text 4
  357.         m_cPane4.GetWindowRect(rcPane);
  358.         ScreenToClient(rcPane);
  359.         ((CStatusBar*) pMessageBar)->GetItemRect(4, rcWindow);
  360.         rcSetPane.left   = (rcWindow.left + rcWindow.right - rcPane.Width()) / 2;
  361.         rcSetPane.right  = rcSetPane.left + rcPane.Width();
  362.         rcSetPane.top    = cy - rcPane.Height();
  363.         rcSetPane.bottom = cy;
  364.         m_cPane4.MoveWindow(rcSetPane);
  365.         m_cPane4.ShowWindow(SW_SHOW);
  366.       }
  367.       else
  368.       { // If status bar hidden, hide pane text
  369.         m_cPane0.ShowWindow(SW_HIDE);
  370.         m_cPane1.ShowWindow(SW_HIDE);
  371.         m_cPane2.ShowWindow(SW_HIDE);
  372.         m_cPane3.ShowWindow(SW_HIDE);
  373.         m_cPane4.ShowWindow(SW_HIDE);
  374.       }
  375.     }else{}
  376.   }else{}
  377. }
  378. #ifdef dCSP_DIALOG_PROGRESS
  379. void CSkinProgressTestView::OnButtonDialog() 
  380. {
  381. // TODO: Add your control notification handler code here
  382.   // Open the dialog
  383.   CSkinProgressTestDialog TestDialog;
  384.   TestDialog.DoModal();
  385. }
  386. #endif // dCSP_DIALOG_PROGRESS
  387. void CSkinProgressTestView::OnSelchangeComboProgress() 
  388. {
  389. // TODO: Add your control notification handler code here
  390. if(m_poSkinProgress != NULL)
  391.   {
  392.     m_poSkinProgress->SetProgress(m_cProgress.GetCurSel() - (cSPT_EnumElements - 1));
  393.   }else{}
  394. }