home *** CD-ROM | disk | FTP | other *** search
/ Prima Shareware 3 / DuCom_Prima-Shareware-3_cd1.bin / PROGRAMO / C / CKTBL / SAMPLES / MFCDEMO / SCROLLDI.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1994-09-07  |  4.9 KB  |  189 lines

  1. // scrolldi.cpp : implementation file
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "mfcdemo.h"
  6. #include "scrolldi.h" 
  7. #include "demotbl.h"
  8.  
  9. #ifdef _DEBUG
  10. #undef THIS_FILE
  11. static char BASED_CODE THIS_FILE[] = __FILE__;
  12. #endif
  13.  
  14. /////////////////////////////////////////////////////////////////////////////
  15. // CScrollDialog dialog
  16.  
  17.  
  18. CScrollDialog::CScrollDialog(CWnd* pParent /*=NULL*/)
  19.     : CDialog(CScrollDialog::IDD, pParent)
  20. {
  21.     //{{AFX_DATA_INIT(CScrollDialog)
  22.     m_SmoothScroll = FALSE;
  23.     //}}AFX_DATA_INIT
  24. }
  25.  
  26. void CScrollDialog::DoDataExchange(CDataExchange* pDX)
  27. {
  28.     CDialog::DoDataExchange(pDX);
  29.     //{{AFX_DATA_MAP(CScrollDialog)
  30.     DDX_Control(pDX, IDC_SCROLL_VSCROLL, m_VScroll);
  31.     DDX_Control(pDX, IDC_SCROLL_VRANGE, m_VRange);
  32.     DDX_Control(pDX, IDC_SCROLL_HSCROLL, m_HScroll);
  33.     DDX_Control(pDX, IDC_SCROLL_HRANGE, m_HRange);
  34.     DDX_Check(pDX, IDC_SCROLL_SMOOTH, m_SmoothScroll);
  35.     //}}AFX_DATA_MAP
  36. }
  37.  
  38. BEGIN_MESSAGE_MAP(CScrollDialog, CDialog)
  39.     //{{AFX_MSG_MAP(CScrollDialog)
  40.     ON_BN_CLICKED(IDC_APPLY, OnApply)
  41.     //}}AFX_MSG_MAP
  42. END_MESSAGE_MAP()   
  43.       
  44. /////////////////////////////////////////////////////////////////////////////
  45. // CScrollDialog  
  46.                     
  47. void CScrollDialog::InitializeFrom( CDemoTableControl * aCKTBL )
  48. {                   
  49.     DWORD flags  = aCKTBL->GetFlags();
  50.     cktbl = aCKTBL;
  51.     
  52.     m_SmoothScroll     = (flags&CKTBL_SMOOTH_SCROLL)!=0;      
  53. }    
  54.  
  55. void CScrollDialog::ApplyData()
  56. {    
  57.     long mask=0,value=0;
  58.     
  59.     // TODO: Add your control notification handler code here
  60.           
  61.     cktbl->SetFlagsTo( CKTBL_SMOOTH_SCROLL, m_SmoothScroll );  
  62.           
  63.     mask |= CKTBL_HSCROLL|CKTBL_HSCROLL_ONDEMAND;
  64.     switch(m_HScroll.GetCurSel()) {
  65.         case 0: value|=0; break;
  66.            case 1: value|=CKTBL_HSCROLL; break;
  67.            case 2: value|=CKTBL_HSCROLL|CKTBL_HSCROLL_ONDEMAND; break;  
  68.      }  
  69.       
  70.      mask |= CKTBL_VSCROLL|CKTBL_VSCROLL_ONDEMAND;
  71.     switch(m_VScroll.GetCurSel()) {
  72.         case 0: value|=0; break;
  73.            case 1: value|=CKTBL_VSCROLL; break;
  74.            case 2: value|=CKTBL_VSCROLL|CKTBL_VSCROLL_ONDEMAND; break;  
  75.      }   
  76.      
  77.      mask |= CKTBL_HSCROLL_MASK;
  78.     switch(m_HRange.GetCurSel()) {
  79.         case 0: value|=CKTBL_HSCROLL_STOP; break;
  80.            case 1: value|=CKTBL_HSCROLL_EXTRA; break;      
  81.      }     
  82.      
  83.      mask |= CKTBL_VSCROLL_MASK;
  84.     switch(m_VRange.GetCurSel()) {
  85.         case 0: value|=CKTBL_VSCROLL_STOP; break;
  86.            case 1: value|=CKTBL_VSCROLL_EXTRA; break;      
  87.      }  
  88.  
  89.        cktbl->SetFlags( (cktbl->GetFlags() & ~mask) | value); 
  90.  
  91.     // Fore a WM_SIZE message to CKTBL so that scroll ranges are updated
  92.  
  93.     CRect rect;
  94.     CSize size;
  95.     cktbl->GetWindowRect(&rect);
  96.     size = rect.Size();
  97.                         
  98.     cktbl->PostMessage( WM_SIZE, 0, size.cx*256 + size.cy );  
  99.     cktbl->Invalidate();
  100. }                      
  101.        
  102. /////////////////////////////////////////////////////////////////////////////
  103. // CScrollDialog message handlers
  104.                     
  105. void CScrollDialog::OnOK()
  106. {
  107.     // TODO: Add extra validation here
  108.     
  109.     CDialog::OnOK();  
  110.     ApplyData();
  111. }
  112.     
  113.  
  114. void CScrollDialog::OnApply()
  115. {
  116.     // TODO: Add your control notification handler code here
  117.     if(UpdateData()) ApplyData();
  118. }
  119.     
  120.  
  121. BOOL CScrollDialog::OnInitDialog()
  122. {     
  123.     long flags = cktbl->GetFlags();
  124.     int sel;
  125.     
  126.     CDialog::OnInitDialog();
  127.     
  128.     // TODO: Add extra initialization here
  129.     
  130.     m_HScroll.Clear();
  131.     m_HScroll.AddString( "None" );
  132.     m_HScroll.AddString( "Always" );
  133.     m_HScroll.AddString( "On demand only" );
  134.     
  135.     m_VScroll.Clear();
  136.     m_VScroll.AddString( "None" );
  137.     m_VScroll.AddString( "Always" );
  138.     m_VScroll.AddString( "On demand only" );
  139.     
  140.     m_HRange.Clear();
  141.     m_HRange.AddString( "Scroll upto limit" );
  142.     m_HRange.AddString( "Scroll into gray area" );
  143.     
  144.     m_VRange.Clear();
  145.     m_VRange.AddString( "Scroll upto limit" );
  146.     m_VRange.AddString( "Scroll into gray area" );
  147.  
  148.     // HScroll
  149.     
  150.     switch( flags & CKTBL_HSCROLL|CKTBL_HSCROLL_ONDEMAND ) {
  151.         case 0:                 sel = 0; break;
  152.         case CKTBL_HSCROLL:     sel = 1; break;
  153.         case CKTBL_HSCROLL|CKTBL_HSCROLL_ONDEMAND:     sel = 2; break;    
  154.         default:                 sel=0;
  155.     }       
  156.     m_HScroll.SetCurSel(sel);
  157.               
  158.     // VScroll              
  159.               
  160.     switch( flags & CKTBL_VSCROLL|CKTBL_VSCROLL_ONDEMAND ) {
  161.         case 0:                 sel = 0; break;
  162.         case CKTBL_VSCROLL:     sel = 1; break;
  163.         case CKTBL_VSCROLL|CKTBL_VSCROLL_ONDEMAND:     sel = 2; break;    
  164.         default:                 sel=0;
  165.     }       
  166.     m_VScroll.SetCurSel(sel);
  167.               
  168.     // HRange              
  169.               
  170.     switch( flags & CKTBL_HSCROLL_MASK ) {
  171.         case CKTBL_HSCROLL_STOP:    sel = 0; break;
  172.         case CKTBL_HSCROLL_EXTRA:     sel = 1; break;
  173.         default:                     sel=0;
  174.     }       
  175.     m_HRange.SetCurSel(sel);   
  176.     
  177.     // VRange              
  178.               
  179.     switch( flags & CKTBL_VSCROLL_MASK ) {
  180.         case CKTBL_VSCROLL_STOP:    sel = 0; break;
  181.         case CKTBL_VSCROLL_EXTRA:     sel = 1; break;
  182.         default:                     sel=0;
  183.     }       
  184.     m_VRange.SetCurSel(sel);
  185.      
  186.      
  187.     return TRUE;  // return TRUE  unless you set the focus to a control
  188. }
  189.