home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / mfc / general / cmnctrl2 / progctrl.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1998-03-27  |  4.1 KB  |  162 lines

  1. // ProgCtrl.cpp : implementation file
  2. //
  3.  
  4. // This is a part of the Microsoft Foundation Classes C++ library.
  5. // Copyright (C) 1992-1998 Microsoft Corporation
  6. // All rights reserved.
  7. //
  8. // This source code is only intended as a supplement to the
  9. // Microsoft Foundation Classes Reference and related
  10. // electronic documentation provided with the library.
  11. // See these sources for detailed information regarding the
  12. // Microsoft Foundation Classes product.
  13.  
  14. #include "stdafx.h"
  15. #include "CmnCtrl2.h"
  16. #include "ProgCtrl.h"
  17.  
  18. #ifdef _DEBUG
  19. #undef THIS_FILE
  20. static char THIS_FILE[] = __FILE__;
  21. #endif
  22.  
  23. /////////////////////////////////////////////////////////////////////////////
  24. // CProgCtrlPage property page
  25.  
  26. IMPLEMENT_DYNCREATE(CProgCtrlPage, CPropertyPage)
  27.  
  28. #ifdef _DEBUG
  29. #define new DEBUG_NEW
  30. #endif
  31.  
  32. CProgCtrlPage::CProgCtrlPage() : CPropertyPage(CProgCtrlPage::IDD)
  33. {
  34.     //{{AFX_DATA_INIT(CProgCtrlPage)
  35.     m_iDelta = 0;
  36.     m_uiStep = 10;
  37.     m_uiRangeFrom = 0;
  38.     m_uiPos = 0;
  39.     m_uiRangeTo = 175;
  40.     m_bVertical = FALSE;
  41.     m_bSmooth = FALSE;
  42.     //}}AFX_DATA_INIT
  43.     m_psp.dwFlags &= ~PSP_HASHELP;  // Lose the Help button
  44.  
  45. }
  46.  
  47. CProgCtrlPage::~CProgCtrlPage()
  48. {
  49. }
  50.  
  51. void CProgCtrlPage::DoDataExchange(CDataExchange* pDX)
  52. {
  53.     CPropertyPage::DoDataExchange(pDX);
  54.     //{{AFX_DATA_MAP(CProgCtrlPage)
  55.     DDX_Text(pDX, IDC_PROGRESS_DELTA, m_iDelta);
  56.     DDX_Text(pDX, IDC_PROGRESS_STEP, m_uiStep);
  57.     DDV_MinMaxUInt(pDX, m_uiStep, 0, 65535);
  58.     DDX_Text(pDX, IDC_PROGRESS_FROM, m_uiRangeFrom);
  59.     DDV_MinMaxUInt(pDX, m_uiRangeFrom, 0, 65535);
  60.     DDX_Text(pDX, IDC_PROGRESS_POS, m_uiPos);
  61.     DDV_MinMaxUInt(pDX, m_uiPos, 0, 65535);
  62.     DDX_Text(pDX, IDC_PROGRESS_TO, m_uiRangeTo);
  63.     DDV_MinMaxUInt(pDX, m_uiRangeTo, 0, 65535);
  64.     DDX_Check(pDX, IDC_VERTICAL, m_bVertical);
  65.     DDX_Check(pDX, IDC_SMOOTH, m_bSmooth);
  66.     //}}AFX_DATA_MAP
  67. }
  68.  
  69. BOOL CProgCtrlPage::OnInitDialog()
  70. {
  71.     CPropertyPage::OnInitDialog();
  72.  
  73.     // Initially create progress control in horizontal position
  74.     CWnd* pWnd =
  75.         GetDlgItem( IDC_PROG_HORZPOS );
  76.     CRect rect;
  77.     pWnd->GetWindowRect( &rect );
  78.     ScreenToClient( &rect );
  79.  
  80.     // Initialise controls
  81.     m_Progress.Create( WS_VISIBLE | WS_CHILD, rect, this, IDC_PROGRESS );
  82.     m_Progress.SetRange( static_cast<short>(m_uiRangeFrom), static_cast<short>(m_uiRangeTo) );
  83.  
  84.     return TRUE;
  85. }
  86.  
  87. BEGIN_MESSAGE_MAP(CProgCtrlPage, CPropertyPage)
  88.     //{{AFX_MSG_MAP(CProgCtrlPage)
  89.     ON_BN_CLICKED(IDC_PROGRESS_STEPIT, OnProgressStepit)
  90.     ON_BN_CLICKED(IDC_SETPOS, OnSetpos)
  91.     ON_BN_CLICKED(IDC_PROGRESS_SETDELTA, OnProgressSetdelta)
  92.     ON_EN_KILLFOCUS(IDC_PROGRESS_FROM, OnFrom)
  93.     ON_EN_KILLFOCUS(IDC_PROGRESS_TO, OnTo)
  94.     ON_EN_KILLFOCUS(IDC_PROGRESS_STEP, OnStep)
  95.     ON_BN_CLICKED(IDC_SMOOTH, OnStyleChange)
  96.     ON_BN_CLICKED(IDC_VERTICAL, OnStyleChange)
  97.     //}}AFX_MSG_MAP
  98. END_MESSAGE_MAP()
  99.  
  100. /////////////////////////////////////////////////////////////////////////////
  101. // CProgCtrlPage message handlers
  102.  
  103. void CProgCtrlPage::OnProgressStepit()
  104. {
  105.     m_Progress.StepIt();
  106. }
  107.  
  108. void CProgCtrlPage::OnSetpos()
  109. {
  110.     UpdateData();
  111.     m_Progress.SetPos( m_uiPos );
  112. }
  113.  
  114. void CProgCtrlPage::OnProgressSetdelta()
  115. {
  116.     UpdateData();
  117.     m_Progress.OffsetPos( m_iDelta );
  118. }
  119.  
  120. void CProgCtrlPage::OnFrom()
  121. {
  122.     UpdateData();
  123.     m_Progress.SetRange( static_cast<short>(m_uiRangeFrom), static_cast<short>(m_uiRangeTo) );
  124. }
  125.  
  126. void CProgCtrlPage::OnTo()
  127. {
  128.     UpdateData();
  129.     m_Progress.SetRange( static_cast<short>(m_uiRangeFrom), static_cast<short>(m_uiRangeTo) );
  130. }
  131.  
  132. void CProgCtrlPage::OnStep()
  133. {
  134.     UpdateData();
  135.     m_Progress.SetStep( m_uiStep );
  136. }
  137.  
  138. void CProgCtrlPage::OnStyleChange()
  139. {
  140.     UpdateData();
  141.  
  142.     m_Progress.DestroyWindow();
  143.  
  144.     // Determine orientation
  145.     CWnd* pWnd =
  146.         GetDlgItem( (0==m_bVertical)?IDC_PROG_HORZPOS:IDC_PROG_VERTPOS );
  147.     CRect rect;
  148.     pWnd->GetWindowRect( &rect );
  149.     ScreenToClient( &rect );
  150.  
  151.     DWORD dwStyle= 0;
  152.     if( m_bSmooth)
  153.         dwStyle= PBS_SMOOTH;
  154.     if(0 == m_bVertical)
  155.         m_Progress.Create( WS_VISIBLE | WS_CHILD |
  156.             dwStyle, rect, this, IDC_PROGRESS );
  157.     else
  158.         m_Progress.Create( WS_VISIBLE | WS_CHILD |
  159.             PBS_VERTICAL | dwStyle, rect, this, IDC_PROGRESS );
  160.     m_Progress.SetRange(static_cast<short>(m_uiRangeFrom), static_cast<short>(m_uiRangeTo));
  161. }
  162.