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

状态条

开发平台:

Visual C++

  1. // SkinProgressTestDialog.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "skinprogresstest.h"
  5. #include "SkinProgressTestDialog.h"
  6. #include "SkinProgressTestScanned.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CSkinProgressTestDialog dialog
  14. #ifdef dCSP_DIALOG_PROGRESS
  15. CSkinProgressTestDialog::CSkinProgressTestDialog(CWnd* pParent /*=NULL*/)
  16. : CDialog(CSkinProgressTestDialog::IDD, pParent)
  17. {
  18. //{{AFX_DATA_INIT(CSkinProgressTestDialog)
  19. m_nLimit = 30000;
  20. m_strText = _T("This text allows to test the text wrapping");
  21. m_bCheckReverse = FALSE;
  22. //}}AFX_DATA_INIT
  23.   m_poSkinProgress = NULL;
  24.   // Minimum dialog size
  25.   m_nWidth  = 0;
  26.   m_nHeight = 0;
  27. }
  28. void CSkinProgressTestDialog::DoDataExchange(CDataExchange* pDX)
  29. {
  30. CDialog::DoDataExchange(pDX);
  31. //{{AFX_DATA_MAP(CSkinProgressTestDialog)
  32. DDX_Control(pDX, IDC_ICON_GRIP_SIZE, m_cGripSize);
  33. DDX_Control(pDX, IDC_HEAD_T1, m_cHeadT1);
  34. DDX_Control(pDX, IDC_HEAD_P1, m_cHeadP1);
  35. DDX_Control(pDX, IDC_CHECK_REVERSE, m_cCheckReverse);
  36. DDX_Control(pDX, IDC_HEAD_REVERSE, m_cHeadReverse);
  37. DDX_Control(pDX, IDC_EDIT_TEXT, m_cEditTxt);
  38. DDX_Control(pDX, IDC_COMA_TXT, m_cComaTxt);
  39. DDX_Control(pDX, IDC_COMA_TXTWND, m_cComaTxtWnd);
  40. DDX_Control(pDX, IDC_HEAD_PROGRESS, m_cHeadProgress);
  41. DDX_Control(pDX, IDC_HEAD_TXT, m_cHeadTxt);
  42. DDX_Control(pDX, IDC_HEAD_TXTWND, m_cHeadTxtWnd);
  43. DDX_Control(pDX, IDC_SPIN_LIMIT, m_cLimit);
  44. DDX_Control(pDX, IDC_COMBO_BAR, m_cBar);
  45. DDX_Control(pDX, IDC_COMBO_TEXT, m_cText);
  46. DDX_Control(pDX, IDC_COMBO_PROGRESS, m_cProgress);
  47. DDX_Control(pDX, IDC_BUTTON_TEST, m_cButtonTest);
  48. DDX_Control(pDX, IDC_BOTTOM_RIGHT, m_cBottomRight);
  49. DDX_Control(pDX, IDC_PROGRESS_2, m_cProgress2);
  50. DDX_Control(pDX, IDC_TEXTPANE_2, m_cTextPane2);
  51. DDX_Control(pDX, IDC_PROGRESS_1, m_cProgress1);
  52. DDX_Control(pDX, IDC_TEXTPANE_1, m_cTextPane1);
  53. DDX_Check(pDX, IDC_CHECK_REVERSE, m_bCheckReverse);
  54. DDX_Text(pDX, IDC_EDIT_LIMIT, m_nLimit);
  55. DDX_Text(pDX, IDC_EDIT_TEXT, m_strText);
  56. //}}AFX_DATA_MAP
  57. }
  58. BEGIN_MESSAGE_MAP(CSkinProgressTestDialog, CDialog)
  59. //{{AFX_MSG_MAP(CSkinProgressTestDialog)
  60. ON_BN_CLICKED(IDC_BUTTON_TEST, OnButtonTest)
  61. ON_BN_CLICKED(IDC_RADIO_DEFAULT, OnRadioDefault)
  62. ON_BN_CLICKED(IDC_RADIO_AQUA, OnRadioAqua)
  63. ON_BN_CLICKED(IDC_RADIO_LUNA, OnRadioLuna)
  64. ON_BN_CLICKED(IDC_RADIO_PHOTON, OnRadioPhoton)
  65. ON_WM_SIZE()
  66. ON_WM_SIZING()
  67. ON_CBN_SELCHANGE(IDC_COMBO_TEXT, OnSelchangeComboText)
  68. ON_BN_CLICKED(ID_SCANNED_SKIN, OnScannedSkin)
  69. ON_BN_CLICKED(IDC_SCANSKIN, OnScannedSkin)
  70. ON_CBN_SELCHANGE(IDC_COMBO_PROGRESS, OnSelchangeComboProgress)
  71. //}}AFX_MSG_MAP
  72. END_MESSAGE_MAP()
  73. BOOL CSkinProgressTestDialog::OnInitDialog() 
  74. {
  75.   // Init
  76.   // Process
  77. CDialog::OnInitDialog();
  78. // TODO: Add extra initialization here
  79.   // Select IDC_PROGRESS_1
  80.   m_cBar.SetCurSel(0);
  81.   // Select Limit
  82.   m_cLimit.SetRange32(1, 65535);
  83.   m_cLimit.SetPos(30000);
  84.   // Select default bitmap
  85.   CheckRadioButton(IDC_RADIO_DEFAULT, IDC_RADIO_PHOTON, IDC_RADIO_DEFAULT);
  86.   // Don't reverse the bitmap
  87.   m_bCheckReverse = false;
  88.   // Select IDC_TEXTPANE_1
  89.   m_cText.SetCurSel(1);
  90.   // Select AUTOSIZE
  91.   m_cProgress.SetCurSel(6);
  92. #ifdef dCSP_SLIDERBAR_METHOD
  93.   m_cHeadReverse.EnableWindow(true);
  94.   m_cCheckReverse.EnableWindow(true);
  95. #else
  96.   m_cHeadReverse.EnableWindow(false);
  97.   m_cCheckReverse.EnableWindow(false);
  98. #endif // dCSP_SLIDERBAR_METHOD
  99. return TRUE;  // return TRUE unless you set the focus to a control
  100.               // EXCEPTION: OCX Property Pages should return FALSE
  101. }
  102. /////////////////////////////////////////////////////////////////////////////
  103. // CSkinProgressTestDialog message handlers
  104. void CSkinProgressTestDialog::OnButtonTest() 
  105. {
  106.   CWnd*    poProgress = NULL;
  107.   CBitmap* poBitmap   = NULL;
  108.   CWnd*    poMessage  = NULL;
  109.   int      nTempo;
  110. // TODO: Add your control notification handler code here
  111.   UpdateData(true); // Update variables
  112.   m_cButtonTest.EnableWindow(false); // Disable the 'TEST' button
  113.   // Select the progress pane
  114.   nTempo = m_cBar.GetCurSel();
  115.   switch(nTempo)
  116.   {
  117.     case 0 :
  118.       poProgress = &m_cProgress1;
  119.       break;
  120.     case 1 :
  121.       poProgress = &m_cProgress2;
  122.       break;
  123.     default :
  124.       poProgress = &m_cProgress1;
  125.       break;
  126.   }
  127.   // Select the bitmap
  128.   int nCheckedRadio = GetCheckedRadioButton(IDC_RADIO_DEFAULT, IDC_RADIO_PHOTON);
  129.   switch(nCheckedRadio)
  130.   {
  131.     case IDC_RADIO_DEFAULT :
  132.       poBitmap = NULL;
  133.       break;
  134.     case IDC_RADIO_AQUA :
  135.       poBitmap = new CBitmap();
  136.       poBitmap->LoadBitmap(IDB_BMP_AQUA);
  137.       break;
  138.     case IDC_RADIO_LUNA :
  139.       poBitmap = new CBitmap();
  140.       poBitmap->LoadBitmap(IDB_BMP_LUNA);
  141.       break;
  142.     case IDC_RADIO_PHOTON :
  143.       poBitmap = new CBitmap();
  144.       poBitmap->LoadBitmap(IDB_BMP_PHOTON);
  145.       break;
  146.     default :
  147.       poBitmap = NULL;
  148.       break;
  149.   }
  150.   // Select the text pane
  151.   nTempo = m_cText.GetCurSel();
  152.   switch(nTempo)
  153.   {
  154.     case 0 :
  155.       poMessage = NULL;
  156.       break;
  157.     case 1 :
  158.       poMessage = &m_cTextPane1;
  159.       break;
  160.     case 2 :
  161.       poMessage = &m_cTextPane2;
  162.       break;
  163.     default :
  164.       poMessage = NULL;
  165.       break;
  166.   }
  167. #ifdef dCSP_DIALOG_PROGRESS
  168.   { // Pointer living CSkinProgress demonstration
  169.     if(poMessage != NULL)
  170.     { // WITH TEXT
  171.       m_poSkinProgress = new CSkinProgress
  172.       (
  173.         poProgress,
  174.         m_nLimit,
  175.         poBitmap,
  176. #ifdef dCSP_SLIDERBAR_METHOD
  177.         m_bCheckReverse,
  178. #endif // dCSP_SLIDERBAR_METHOD
  179.         poMessage,
  180.         m_strText,
  181.         m_cProgress.GetCurSel() - (cSPT_EnumElements - 1)
  182.       );
  183.     }
  184.     else
  185.     { // WITHOUT TEXT
  186.       m_poSkinProgress = new CSkinProgress
  187.       (
  188.         poProgress,
  189.         m_nLimit,
  190.         poBitmap
  191. #ifdef dCSP_SLIDERBAR_METHOD
  192.        ,m_bCheckReverse
  193. #endif // dCSP_SLIDERBAR_METHOD
  194.       );
  195.     }
  196. /*
  197. // dCSP_TIMED_REDRAW test purpose
  198.     SYSTEMTIME     TimeIn;
  199.     FILETIME       TimeOut;
  200.    
  201.     ULARGE_INTEGER TimeOne;
  202.     ULARGE_INTEGER TimeTwo;
  203.     GetLocalTime(&TimeIn);
  204.     SystemTimeToFileTime(&TimeIn, &TimeOut);
  205.     TimeOne.QuadPart   = TimeOut.dwHighDateTime;
  206.     TimeOne.QuadPart <<= 32;
  207.     TimeOne.QuadPart  |= TimeOut.dwLowDateTime;
  208. */
  209.   for(int i = 0; i < m_nLimit; i += 1)
  210.     {
  211. /*
  212. // dCSP_TIMED_REDRAW test purpose
  213.       TimeOne.QuadPart += 5;
  214.       do
  215.       {
  216.         GetLocalTime(&TimeIn);
  217.         SystemTimeToFileTime(&TimeIn, &TimeOut);
  218.         TimeTwo.QuadPart   = TimeOut.dwHighDateTime;
  219.         TimeTwo.QuadPart <<= 32;
  220.         TimeTwo.QuadPart  |= TimeOut.dwLowDateTime;
  221.       }
  222.       while(TimeTwo.QuadPart < TimeOne.QuadPart);
  223.       TimeOne = TimeTwo;
  224. */
  225.     m_poSkinProgress->StepIt();
  226.     PeekAndPump();
  227.   }
  228.     delete m_poSkinProgress;
  229.     m_poSkinProgress = NULL;
  230.   } // Here the CSkinProgress is deleted
  231. #endif // dCSP_DIALOG_PROGRESS
  232.   if(poBitmap != NULL)
  233.   {
  234.     delete poBitmap;
  235.   }else{}  
  236.   if(IsWindow(m_cButtonTest.m_hWnd))
  237.   { // If you close the application while the bar is in progress, the objects are already deleted, so avoid to enable a deleted object
  238.     m_cButtonTest.EnableWindow(true); 
  239.   }else{}
  240. }
  241. void CSkinProgressTestDialog::OnRadioDefault() 
  242. { // Set the Default bitmap
  243. //  CheckRadioButton(IDC_RADIO_DEFAULT, IDC_RADIO_PHOTON, IDC_RADIO_DEFAULT);
  244.   if(m_poSkinProgress != NULL)
  245.   {
  246.     m_poSkinProgress->SetBitmap(); // Default biptmap
  247.   }else{}
  248. }
  249. void CSkinProgressTestDialog::OnRadioAqua() 
  250. { // Set the AQUA bitmap
  251. //  CheckRadioButton(IDC_RADIO_DEFAULT, IDC_RADIO_PHOTON, IDC_RADIO_AQUA);
  252.   if(m_poSkinProgress != NULL)
  253.   {
  254.     CBitmap oBitmap;
  255.     oBitmap.LoadBitmap(IDB_BMP_AQUA);
  256.     m_poSkinProgress->SetBitmap(&oBitmap);
  257.   }else{}
  258. }
  259. void CSkinProgressTestDialog::OnRadioLuna() 
  260. { // Set the LUNA bitmap
  261. //  CheckRadioButton(IDC_RADIO_DEFAULT, IDC_RADIO_PHOTON, IDC_RADIO_LUNA);
  262.   if(m_poSkinProgress != NULL)
  263.   {
  264.     CBitmap oBitmap;
  265.     oBitmap.LoadBitmap(IDB_BMP_LUNA);
  266.     m_poSkinProgress->SetBitmap(&oBitmap);
  267.   }else{}
  268. }
  269. void CSkinProgressTestDialog::OnRadioPhoton() 
  270. { // Set the PHOTON bitmap
  271. //  CheckRadioButton(IDC_RADIO_DEFAULT, IDC_RADIO_PHOTON, IDC_RADIO_PHOTON);
  272.   if(m_poSkinProgress != NULL)
  273.   {
  274.     CBitmap oBitmap;
  275.     oBitmap.LoadBitmap(IDB_BMP_PHOTON);
  276.     m_poSkinProgress->SetBitmap(&oBitmap);
  277.   }else{}
  278. }
  279. void CSkinProgressTestDialog::OnSize(UINT nType, int cx, int cy) 
  280. {
  281. CDialog::OnSize(nType, cx, cy);
  282. // TODO: Add your message handler code here
  283.   CRect oRectPane;
  284.   if(
  285.          (m_nWidth  == 0)
  286.       && (m_nHeight == 0)
  287.     )
  288.   { // Snap the start size of the dialog, quite messy, don't tell me please ;P
  289.     m_nWidth  = cx + 8;  //  8 : Dummy value
  290.     m_nHeight = cy + 27; // 27 : Dummy value
  291.   }
  292.   if(IsWindow(GetSafeHwnd()))
  293.   {
  294.     if(m_cProgress1.m_hWnd != NULL)
  295.     { // Move the PROGRESS_1 pane
  296.       m_cProgress1.GetWindowRect(oRectPane);
  297.       this->ScreenToClient(oRectPane);
  298.       oRectPane.right  = cx - 10; // 10 : Dummy value
  299.       oRectPane.top    = cy - 62; // 62 : Dummy value
  300.       oRectPane.bottom = cy - 42; // 42 : Dummy value
  301.       m_cProgress1.MoveWindow(oRectPane); // , false); // Don't refresh right now, but wait complete update below
  302.     }else{}
  303.     if(m_cProgress2.m_hWnd != NULL)
  304.     { // Resize the PROGRESS_2 pane
  305.       m_cProgress2.GetWindowRect(oRectPane);
  306.       this->ScreenToClient(oRectPane);
  307.       oRectPane.bottom = cy - 72; // 72 : Dummy value
  308.       m_cProgress2.MoveWindow(oRectPane); // , false); // Don't refresh right now, but wait complete update below
  309.     }else{}
  310.     if(m_cTextPane1.m_hWnd != NULL)
  311.     {  // Move the TEXT_1 pane
  312.       m_cTextPane1.GetWindowRect(oRectPane);
  313.       this->ScreenToClient(oRectPane);
  314.       oRectPane.right  = cx - 34; // 34 : Dummy value
  315.       oRectPane.top    = cy - 33; // 33 : Dummy value
  316.       oRectPane.bottom = cy - 13; // 13 : Dummy value
  317.       m_cTextPane1.MoveWindow(oRectPane); // , false); // Don't refresh right now, but wait complete update below
  318.     }else{}
  319.     if(m_cTextPane2.m_hWnd != NULL)
  320.     { // Resize the TEXT_2 pane
  321.       m_cTextPane2.GetWindowRect(oRectPane);
  322.       this->ScreenToClient(oRectPane);
  323.       oRectPane.right  = cx - 10; // 10 : Dummy value
  324.       oRectPane.bottom = cy - 71; // 71 : Dummy value
  325.       m_cTextPane2.MoveWindow(oRectPane); // , false); // Don't refresh right now, but wait complete update below
  326.     }else{}
  327.     if(m_cHeadP1.m_hWnd != NULL)
  328.     {  // Move the P_1 text
  329.       m_cHeadP1.GetWindowRect(oRectPane);
  330.       this->ScreenToClient(oRectPane);
  331.       oRectPane.top    = cy - 62; // 62 : Dummy value
  332.       oRectPane.bottom = cy - 42; // 42 : Dummy value
  333.       m_cHeadP1.MoveWindow(oRectPane); // , false); // Don't refresh right now, but wait complete update below
  334.     }else{}
  335.     if(m_cHeadT1.m_hWnd != NULL)
  336.     {  // Move the T_1 text
  337.       m_cHeadT1.GetWindowRect(oRectPane);
  338.       this->ScreenToClient(oRectPane);
  339.       oRectPane.top    = cy - 33; // 33 : Dummy value
  340.       oRectPane.bottom = cy - 13; // 13 : Dummy value
  341.       m_cHeadT1.MoveWindow(oRectPane); // , false); // Don't refresh right now, but wait complete update below
  342.     }else{}
  343.     if(m_cGripSize.m_hWnd != NULL)
  344.     {  // Move the size grip
  345.       m_cGripSize.GetWindowRect(oRectPane);
  346.       this->ScreenToClient(oRectPane);
  347.       oRectPane.left   = cx - 32;
  348.       oRectPane.right  = cx;
  349.       oRectPane.top    = cy - 32;
  350.       oRectPane.bottom = cy;
  351.       m_cGripSize.MoveWindow(oRectPane); // , false); // Don't refresh right now, but wait complete update below
  352.     }else{}
  353.   }else{}
  354. //  Invalidate(); // Invalidate everything -> Everything have to be updated
  355. //  UpdateWindow(); // Update invalidated things (everything) -> FLASHY
  356. }
  357. void CSkinProgressTestDialog::OnSizing(UINT fwSide, LPRECT pRect) 
  358. { // Class Wizard -> Class Info tab -> Advanced options pane -> Message filter combo -> Window
  359. CDialog::OnSizing(fwSide, pRect);
  360. // TODO: Add your message handler code here and/or call default
  361.   // Block horizontal
  362.   if(
  363.         (pRect->right - pRect->left)
  364.       < m_nWidth
  365.     )
  366.   {
  367.     if(
  368.            (fwSide == WMSZ_BOTTOMLEFT)
  369.         || (fwSide == WMSZ_LEFT)
  370.         || (fwSide == WMSZ_TOPLEFT)
  371.       )
  372.     {
  373.       pRect->left = pRect->right - m_nWidth;
  374.     }
  375.     else
  376.     {
  377.       pRect->right = pRect->left + m_nWidth;
  378.     }
  379.   }
  380.   // Block vertical
  381.   if(
  382.         (pRect->bottom - pRect->top)
  383.       < m_nHeight
  384.     )
  385.   {
  386.     if(
  387.            (fwSide == WMSZ_TOP)
  388.         || (fwSide == WMSZ_TOPLEFT)
  389.         || (fwSide == WMSZ_TOPRIGHT)
  390.       )
  391.     {
  392.       pRect->top = pRect->bottom - m_nHeight;
  393.     }
  394.     else
  395.     {
  396.       pRect->bottom = pRect->top + m_nHeight;
  397.     }
  398.   }
  399.   // Refresh the progress bar and the text pane
  400.   if(m_poSkinProgress != NULL)
  401.   {
  402.     m_poSkinProgress->RefreshPanes();
  403.   }else{}
  404. }
  405. void CSkinProgressTestDialog::OnSelchangeComboText() 
  406. {
  407. // TODO: Add your control notification handler code here
  408.   int      nTempo;
  409.   // Disable/enable additional text parameters if text disabled/enabled
  410.   nTempo = m_cText.GetCurSel();
  411.   switch(nTempo)
  412.   {
  413.     case 0 :
  414.       m_cHeadTxtWnd.EnableWindow(false);
  415.       m_cComaTxtWnd.EnableWindow(false);
  416.       m_cHeadTxt.EnableWindow(false);
  417.       m_cEditTxt.EnableWindow(false);
  418.       m_cComaTxt.EnableWindow(false);
  419.       m_cHeadProgress.EnableWindow(false);
  420.       m_cProgress.EnableWindow(false);
  421.       break;
  422.     default :
  423.       m_cHeadTxtWnd.EnableWindow(true);
  424.       m_cComaTxtWnd.EnableWindow(true);
  425.       m_cHeadTxt.EnableWindow(true);
  426.       m_cEditTxt.EnableWindow(true);
  427.       m_cComaTxt.EnableWindow(true);
  428.       m_cHeadProgress.EnableWindow(true);
  429.       m_cProgress.EnableWindow(true);
  430.       break;
  431.   }
  432. }
  433. void CSkinProgressTestDialog::OnSelchangeComboProgress() 
  434. {
  435. // TODO: Add your control notification handler code here
  436. if(m_poSkinProgress != NULL)
  437.   {
  438.     m_poSkinProgress->SetProgress(m_cProgress.GetCurSel() - (cSPT_EnumElements - 1));
  439.   }else{}
  440. }
  441. void CSkinProgressTestDialog::OnScannedSkin() 
  442. {
  443. // TODO: Add your control notification handler code here
  444.   // Open the dialog
  445.   CSkinProgressTestScanned ScannedDialog;
  446.   ScannedDialog.DoModal();
  447. }
  448. #endif // dCSP_DIALOG_PROGRESS