home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / common / msdev98 / bin / ide / progdlg.dll / TEMPLATE / 149 < prev   
Text File  |  1998-06-18  |  6KB  |  246 lines

  1. //  $$VAL:CppFile$$ : implementation file
  2. // CG: This file was added by the Progress Dialog component
  3.  
  4. #include "stdafx.h"
  5. #include "$$VAL:ResourceInclude$$"
  6. #include "$$VAL:HeaderFile$$"
  7.  
  8. #ifdef _DEBUG
  9. #undef THIS_FILE
  10. static char BASED_CODE THIS_FILE[] = __FILE__;
  11. #endif
  12.  
  13. /////////////////////////////////////////////////////////////////////////////
  14. // $$VAL:ClassName$$ dialog
  15.  
  16. $$VAL:ClassName$$::$$VAL:ClassName$$(UINT nCaptionID)
  17. {
  18.     m_nCaptionID = $$VAL:StringID$$;
  19.     if (nCaptionID != 0)
  20.         m_nCaptionID = nCaptionID;
  21.  
  22. $$IF:CancelButton$$
  23.     m_bCancel=FALSE;
  24. $$ENDIF$$
  25.     m_nLower=$$VAL:Lower$$;
  26.     m_nUpper=$$VAL:Upper$$;
  27.     m_nStep=$$VAL:Step$$;
  28.     //{{AFX_DATA_INIT($$VAL:ClassName$$)
  29.     // NOTE: the ClassWizard will add member initialization here
  30.     //}}AFX_DATA_INIT
  31.     m_bParentDisabled = FALSE;
  32. }
  33.  
  34. $$VAL:ClassName$$::~$$VAL:ClassName$$()
  35. {
  36.     if(m_hWnd!=NULL)
  37.       DestroyWindow();
  38. }
  39.  
  40. BOOL $$VAL:ClassName$$::DestroyWindow()
  41. {
  42.     ReEnableParent();
  43.     return CDialog::DestroyWindow();
  44. }
  45.  
  46. void $$VAL:ClassName$$::ReEnableParent()
  47. {
  48.     if(m_bParentDisabled && (m_pParentWnd!=NULL))
  49.       m_pParentWnd->EnableWindow(TRUE);
  50.     m_bParentDisabled=FALSE;
  51. }
  52.  
  53. BOOL $$VAL:ClassName$$::Create(CWnd *pParent)
  54. {
  55.     // Get the true parent of the dialog
  56.     m_pParentWnd = CWnd::GetSafeOwner(pParent);
  57.  
  58.     // m_bParentDisabled is used to re-enable the parent window
  59.     // when the dialog is destroyed. So we don't want to set
  60.     // it to TRUE unless the parent was already enabled.
  61.  
  62.     if((m_pParentWnd!=NULL) && m_pParentWnd->IsWindowEnabled())
  63.     {
  64.       m_pParentWnd->EnableWindow(FALSE);
  65.       m_bParentDisabled = TRUE;
  66.     }
  67.  
  68.     if(!CDialog::Create($$VAL:ClassName$$::IDD,pParent))
  69.     {
  70.       ReEnableParent();
  71.       return FALSE;
  72.     }
  73.  
  74.     return TRUE;
  75. }
  76.  
  77. void $$VAL:ClassName$$::DoDataExchange(CDataExchange* pDX)
  78. {
  79.     CDialog::DoDataExchange(pDX);
  80.     //{{AFX_DATA_MAP($$VAL:ClassName$$)
  81.     DDX_Control(pDX, CG_IDC_PROGDLG_PROGRESS, m_Progress);
  82.     //}}AFX_DATA_MAP
  83. }
  84.  
  85. BEGIN_MESSAGE_MAP($$VAL:ClassName$$, CDialog)
  86.     //{{AFX_MSG_MAP($$VAL:ClassName$$)
  87.     //}}AFX_MSG_MAP
  88. END_MESSAGE_MAP()
  89.  
  90. $$IF:ShowStatus$$
  91. void $$VAL:ClassName$$::SetStatus(LPCTSTR lpszMessage)
  92. {
  93.     ASSERT(m_hWnd); // Don't call this _before_ the dialog has
  94.                     // been created. Can be called from OnInitDialog
  95.     CWnd *pWndStatus = GetDlgItem(CG_IDC_PROGDLG_STATUS);
  96.  
  97.     // Verify that the static text control exists
  98.     ASSERT(pWndStatus!=NULL);
  99.     pWndStatus->SetWindowText(lpszMessage);
  100. }
  101. $$ENDIF$$
  102.  
  103. void $$VAL:ClassName$$::OnCancel()
  104. {
  105. $$IF:CancelButton$$
  106.     m_bCancel=TRUE;
  107. $$ENDIF$$
  108. }
  109.  
  110. void $$VAL:ClassName$$::SetRange(int nLower,int nUpper)
  111. {
  112.     m_nLower = nLower;
  113.     m_nUpper = nUpper;
  114.     m_Progress.SetRange(nLower,nUpper);
  115. }
  116.   
  117. int $$VAL:ClassName$$::SetPos(int nPos)
  118. {
  119.     PumpMessages();
  120. $$IF:ShowPercent$$
  121.     int iResult = m_Progress.SetPos(nPos);
  122.     UpdatePercent(nPos);
  123.     return iResult;
  124. $$ENDIF$$
  125. $$IF:!ShowPercent$$
  126.     return m_Progress.SetPos(nPos);
  127. $$ENDIF$$
  128. }
  129.  
  130. int $$VAL:ClassName$$::SetStep(int nStep)
  131. {
  132.     m_nStep = nStep; // Store for later use in calculating percentage
  133.     return m_Progress.SetStep(nStep);
  134. }
  135.  
  136. int $$VAL:ClassName$$::OffsetPos(int nPos)
  137. {
  138.     PumpMessages();
  139. $$IF:ShowPercent$$
  140.     int iResult = m_Progress.OffsetPos(nPos);
  141.     UpdatePercent(iResult+nPos);
  142.     return iResult;
  143. $$ENDIF$$
  144. $$IF:!ShowPercent$$
  145.     return m_Progress.OffsetPos(nPos);
  146. $$ENDIF$$
  147. }
  148.  
  149. int $$VAL:ClassName$$::StepIt()
  150. {
  151.     PumpMessages();
  152. $$IF:ShowPercent$$
  153.     int iResult = m_Progress.StepIt();
  154.     UpdatePercent(iResult+m_nStep);
  155.     return iResult;
  156. $$ENDIF$$
  157. $$IF:!ShowPercent$$
  158.     return m_Progress.StepIt();
  159. $$ENDIF$$
  160. }
  161.  
  162. void $$VAL:ClassName$$::PumpMessages()
  163. {
  164.     // Must call Create() before using the dialog
  165.     ASSERT(m_hWnd!=NULL);
  166.  
  167.     MSG msg;
  168.     // Handle dialog messages
  169.     while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
  170.     {
  171.       if(!IsDialogMessage(&msg))
  172.       {
  173.         TranslateMessage(&msg);
  174.         DispatchMessage(&msg);  
  175.       }
  176.     }
  177. }
  178.  
  179. $$IF:CancelButton$$
  180. BOOL $$VAL:ClassName$$::CheckCancelButton()
  181. {
  182.     // Process all pending messages
  183.     PumpMessages();
  184.  
  185.     // Reset m_bCancel to FALSE so that
  186.     // CheckCancelButton returns FALSE until the user
  187.     // clicks Cancel again. This will allow you to call
  188.     // CheckCancelButton and still continue the operation.
  189.     // If m_bCancel stayed TRUE, then the next call to
  190.     // CheckCancelButton would always return TRUE
  191.  
  192.     BOOL bResult = m_bCancel;
  193.     m_bCancel = FALSE;
  194.  
  195.     return bResult;
  196. }
  197. $$ENDIF$$
  198.  
  199. $$IF:ShowPercent$$
  200. void $$VAL:ClassName$$::UpdatePercent(int nNewPos)
  201. {
  202.     CWnd *pWndPercent = GetDlgItem(CG_IDC_PROGDLG_PERCENT);
  203.     int nPercent;
  204.     
  205.     int nDivisor = m_nUpper - m_nLower;
  206.     ASSERT(nDivisor>0);  // m_nLower should be smaller than m_nUpper
  207.  
  208.     int nDividend = (nNewPos - m_nLower);
  209.     ASSERT(nDividend>=0);   // Current position should be greater than m_nLower
  210.  
  211.     nPercent = nDividend * 100 / nDivisor;
  212.  
  213.     // Since the Progress Control wraps, we will wrap the percentage
  214.     // along with it. However, don't reset 100% back to 0%
  215.     if(nPercent!=100)
  216.       nPercent %= 100;
  217.  
  218.     // Display the percentage
  219.     CString strBuf;
  220.     strBuf.Format(_T("%d%c"),nPercent,_T('%'));
  221.  
  222.     CString strCur; // get current percentage
  223.     pWndPercent->GetWindowText(strCur);
  224.  
  225.     if (strCur != strBuf)
  226.         pWndPercent->SetWindowText(strBuf);
  227. }
  228. $$ENDIF$$
  229.     
  230. /////////////////////////////////////////////////////////////////////////////
  231. // $$VAL:ClassName$$ message handlers
  232.  
  233. BOOL $$VAL:ClassName$$::OnInitDialog() 
  234. {
  235.     CDialog::OnInitDialog();
  236.     m_Progress.SetRange(m_nLower,m_nUpper);
  237.     m_Progress.SetStep(m_nStep);
  238.     m_Progress.SetPos(m_nLower);
  239.  
  240.     CString strCaption;
  241.     VERIFY(strCaption.LoadString(m_nCaptionID));
  242.     SetWindowText(strCaption);
  243.  
  244.     return TRUE;  
  245. }
  246.