home *** CD-ROM | disk | FTP | other *** search
/ Mastering Visual Basic 6 / mastvb6.iso / leadtools / ocx32.lt / DUALRANG.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1996-07-10  |  3.9 KB  |  159 lines

  1. // dualrang.cpp : implementation file
  2. // Copyright (C) 1996 LEAD Technologies, Inc.
  3. // All rights reserved.
  4.  
  5. #include "stdafx.h"
  6. #include "mfcdemo.h"
  7. #include "dualrang.h"
  8.  
  9. #ifdef _DEBUG
  10. #undef THIS_FILE
  11. static char BASED_CODE THIS_FILE[] = __FILE__;
  12. #endif
  13.  
  14. /////////////////////////////////////////////////////////////////////////////
  15. // CDualRangeDlg dialog
  16.  
  17.  
  18. CDualRangeDlg::CDualRangeDlg(CWnd* pParent /*=NULL*/)
  19.     : CDialog(CDualRangeDlg::IDD, pParent)
  20. {
  21.     //{{AFX_DATA_INIT(CDualRangeDlg)
  22.     m_strLabel1 = _T("");
  23.     m_strLabel2 = _T("");
  24.     m_strTitle = _T("");
  25.     m_nValue1 = 0;
  26.     m_nValue2 = 0;
  27.         m_nMin = 0;
  28.         m_nMax = 100;
  29.         m_nStep = 1;
  30.         m_nPage = 10;
  31.     //}}AFX_DATA_INIT
  32. }
  33.  
  34.  
  35. void CDualRangeDlg::DoDataExchange(CDataExchange* pDX)
  36. {
  37.     CDialog::DoDataExchange(pDX);
  38.     //{{AFX_DATA_MAP(CDualRangeDlg)
  39.     DDX_Control(pDX, IDC_SCROLLBAR2, m_ScrollBar2);
  40.     DDX_Control(pDX, IDC_SCROLLBAR1, m_ScrollBar1);
  41.     DDX_Text(pDX, IDC_STATIC1, m_strLabel1);
  42.     DDX_Text(pDX, IDC_STATIC2, m_strLabel2);
  43.     DDX_Text(pDX, IDC_EDIT1, m_nValue1);
  44.     DDV_MinMaxInt(pDX, m_nValue1, m_nMin, m_nMax);
  45.     DDX_Text(pDX, IDC_EDIT2, m_nValue2);
  46.     DDV_MinMaxInt(pDX, m_nValue2, m_nMin, m_nMax);
  47.     //}}AFX_DATA_MAP
  48. }
  49.  
  50.  
  51. BEGIN_MESSAGE_MAP(CDualRangeDlg, CDialog)
  52.     //{{AFX_MSG_MAP(CDualRangeDlg)
  53.     ON_WM_HSCROLL()
  54.     ON_EN_CHANGE(IDC_EDIT1, OnChangeEdit1)
  55.     ON_EN_CHANGE(IDC_EDIT2, OnChangeEdit2)
  56.     //}}AFX_MSG_MAP
  57. END_MESSAGE_MAP()
  58.  
  59.  
  60. BOOL CDualRangeDlg::GetValue(BOOL fFirst)
  61. {
  62.         BOOL fTranslated;
  63.         int n;
  64.  
  65.         n = GetDlgItemInt (fFirst ? IDC_EDIT1 : IDC_EDIT2, &fTranslated, TRUE);
  66.         if (!fTranslated || n < m_nMin || n > m_nMax)
  67.                 return(FALSE);
  68.         if(fFirst)
  69.                 m_nValue1 = n;
  70.         else
  71.                 m_nValue2 = n;
  72.         return(TRUE);
  73. }
  74.  
  75. void CDualRangeDlg::SetValue(BOOL fFirst)
  76. {
  77.         if(fFirst)
  78.                 SetDlgItemInt (IDC_EDIT1, m_nValue1, TRUE);
  79.         else
  80.                 SetDlgItemInt (IDC_EDIT2, m_nValue2, TRUE);
  81. }
  82.  
  83. /////////////////////////////////////////////////////////////////////////////
  84. // CDualRangeDlg message handlers
  85.  
  86.  
  87. void CDualRangeDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
  88. {
  89.       BOOL fFirst;
  90.       int nValue;
  91.  
  92.       fFirst = (pScrollBar->GetDlgCtrlID() == IDC_SCROLLBAR1);
  93.       GetValue(fFirst);
  94.       nValue = (fFirst ? m_nValue1 : m_nValue2);
  95.  
  96.       switch (nSBCode)
  97.       {
  98.       case SB_LEFT:
  99.          nValue = m_nMin;
  100.          break;
  101.       case SB_RIGHT:
  102.          nValue = m_nMax;
  103.          break;
  104.       case SB_THUMBPOSITION:
  105.       case SB_THUMBTRACK:
  106.          nValue = (int) nPos;
  107.          break;
  108.       case SB_LINELEFT:
  109.          nValue = max (nValue - m_nStep, m_nMin);
  110.          break;
  111.       case SB_LINERIGHT:
  112.          nValue = min (nValue + m_nStep, m_nMax);
  113.          break;
  114.       case SB_PAGELEFT:
  115.          nValue = max (nValue - m_nPage, m_nMin);
  116.          break;
  117.       case SB_PAGERIGHT:
  118.          nValue = min (nValue + m_nPage, m_nMax);
  119.          break;
  120.       }
  121.       if(fFirst)
  122.         m_nValue1 = nValue;
  123.       else
  124.         m_nValue2 = nValue;
  125.       pScrollBar->SetScrollPos(nValue);
  126.       SetValue(fFirst);
  127. }
  128.  
  129. void CDualRangeDlg::OnChangeEdit1() 
  130. {
  131.       if(GetValue(TRUE))
  132.               m_ScrollBar1.SetScrollPos(m_nValue1);
  133.     
  134. }
  135.  
  136. void CDualRangeDlg::OnChangeEdit2() 
  137. {
  138.       if(GetValue(FALSE))
  139.               m_ScrollBar2.SetScrollPos(m_nValue2);
  140.     
  141. }
  142.  
  143.  
  144. BOOL CDualRangeDlg::OnInitDialog() 
  145. {
  146.     CDialog::OnInitDialog();
  147.     
  148.         SetWindowText(m_strTitle);
  149.         m_ScrollBar1.SetScrollRange(m_nMin, m_nMax, TRUE);
  150.         m_ScrollBar1.SetScrollPos(m_nValue1);
  151.         m_ScrollBar2.SetScrollRange(m_nMin, m_nMax, TRUE);
  152.         m_ScrollBar2.SetScrollPos(m_nValue2);
  153.  
  154.     // TODO: Add extra initialization here
  155.     
  156.     return TRUE;  // return TRUE unless you set the focus to a control
  157.                   // EXCEPTION: OCX Property Pages should return FALSE
  158. }
  159.