home *** CD-ROM | disk | FTP | other *** search
/ Total C++ 2 / TOTALCTWO.iso / borland / cmnctrl.pak / ANIMCTRL.CPP next >
C/C++ Source or Header  |  1997-05-06  |  4KB  |  168 lines

  1. // animctrl.cpp : implementation file
  2. //
  3.  
  4. // This is a part of the Microsoft Foundation Classes C++ library.
  5. // Copyright (C) 1992-1995 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 "ctrldemo.h"
  16. #include "animctrl.h"
  17.  
  18. #ifdef _DEBUG
  19. #undef THIS_FILE
  20. static char BASED_CODE THIS_FILE[] = __FILE__;
  21. #endif
  22.  
  23. /////////////////////////////////////////////////////////////////////////////
  24. // CAnimateCtrlPage property page
  25.  
  26. CAnimateCtrlPage::CAnimateCtrlPage()
  27.     : CPropertyPage(CAnimateCtrlPage::IDD)
  28. {
  29.     //{{AFX_DATA_INIT(CAnimateCtrlPage)
  30.     m_cstrFileName = _T("");
  31.     m_bCentered = TRUE;
  32.     m_bTransparent = FALSE;
  33.     m_bAutoplay = FALSE;
  34.     //}}AFX_DATA_INIT
  35.     m_dwStyle = WS_CHILD|WS_VISIBLE|WS_BORDER|ACS_CENTER;
  36. }
  37.  
  38. void CAnimateCtrlPage::DoDataExchange(CDataExchange* pDX)
  39. {
  40.     CPropertyPage::DoDataExchange(pDX);
  41.     //{{AFX_DATA_MAP(CAnimateCtrlPage)
  42.     DDX_Check(pDX, IDC_CENTER, m_bCentered);
  43.     DDX_Check(pDX, IDC_TRANSPARENT, m_bTransparent);
  44.     DDX_Check(pDX, IDC_AUTOPLAY, m_bAutoplay);
  45.     DDX_Text(pDX, IDC_EDIT1, m_cstrFileName);
  46.     //}}AFX_DATA_MAP
  47. }
  48.  
  49. BEGIN_MESSAGE_MAP(CAnimateCtrlPage, CPropertyPage)
  50.     //{{AFX_MSG_MAP(CAnimateCtrlPage)
  51.     ON_EN_KILLFOCUS(IDC_EDIT1, OnFileChange)
  52.     ON_BN_CLICKED(IDC_BROWSE, OnBrowse)
  53.     ON_BN_CLICKED(IDC_CENTER, OnCenter)
  54.     ON_BN_CLICKED(IDC_TRANSPARENT, OnTransparent)
  55.     ON_BN_CLICKED(IDC_AUTOPLAY, OnAutoplay)
  56.     ON_BN_CLICKED(IDC_PLAY, OnPlay)
  57.     ON_BN_CLICKED(IDC_STOP, OnStop)
  58.     //}}AFX_MSG_MAP
  59. END_MESSAGE_MAP()
  60.  
  61. /////////////////////////////////////////////////////////////////////////////
  62. // CAnimateCtrlPage message handlers
  63. BOOL CAnimateCtrlPage::OnInitDialog()
  64. {
  65.     if(!CPropertyPage::OnInitDialog())
  66.         return FALSE;
  67.  
  68.     // Create animation control inside static frame.
  69.     // This is necessary to avoid having the animation control
  70.     // "overflow" the rectangle assigned to it when the
  71.     // ACS_CENTER style is removed.
  72.     
  73.     CWnd* pFrame = GetDlgItem(IDC_ANIMFRAME);
  74.     pFrame->GetClientRect(&m_rectAnimateCtrl);
  75.     m_AnimateCtrl.Create(m_dwStyle, m_rectAnimateCtrl, pFrame, IDC_ANIMATE);
  76.  
  77.     return TRUE;
  78. }
  79.  
  80. void CAnimateCtrlPage::OnFileChange()
  81. {
  82.     UpdateData();
  83.     CFileStatus filestatus;
  84.     if(CFile::GetStatus(m_cstrFileName, filestatus))
  85.         ApplyChanges();
  86. }
  87.  
  88. void CAnimateCtrlPage::OnBrowse() 
  89. {
  90. #ifndef _MAC
  91.     CFileDialog dlg( TRUE,_T("AVI"),_T("*.AVI"),
  92.                      OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
  93.                      _T("Animation (*.AVI)|*.AVI|"));
  94. #else
  95.     CFileDialog dlg( TRUE,NULL,NULL,
  96.                      OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
  97.                      _T("Animation|AVI |"));
  98. #endif
  99.     if( dlg.DoModal()==IDOK )
  100.     {
  101.         m_cstrFileName = dlg.GetPathName();
  102.         UpdateData(FALSE);
  103.         ApplyChanges();
  104.     }
  105. }
  106.  
  107. void CAnimateCtrlPage::OnCenter()
  108. {
  109.     UpdateData();
  110.     if( m_bCentered )
  111.         m_dwStyle |= ACS_CENTER;
  112.     else
  113.         m_dwStyle &= ~ACS_CENTER;
  114.     ApplyChanges();
  115. }
  116.  
  117. void CAnimateCtrlPage::OnTransparent()
  118. {
  119.     UpdateData();
  120.     if( m_bTransparent )
  121.         m_dwStyle |= ACS_TRANSPARENT;
  122.     else
  123.         m_dwStyle &= ~ACS_TRANSPARENT;
  124.     ApplyChanges();
  125. }
  126.  
  127. void CAnimateCtrlPage::OnAutoplay()
  128. {
  129.     UpdateData();
  130.     if( m_bAutoplay )
  131.         m_dwStyle |= ACS_AUTOPLAY;
  132.     else
  133.         m_dwStyle &= ~ACS_AUTOPLAY;
  134.     ApplyChanges();
  135. }
  136.  
  137. void CAnimateCtrlPage::OnPlay() 
  138. {
  139.     // From frame: 1, To frame: end (0xFFFF, or -1), 
  140.     // Play once (1)
  141.     m_AnimateCtrl.Play(0,0xFFFF,1);
  142. }
  143.  
  144. void CAnimateCtrlPage::OnStop() 
  145. {
  146.     m_AnimateCtrl.Stop();    
  147. }
  148.  
  149. void CAnimateCtrlPage::ApplyChanges()
  150. {
  151.     // Stop any current animation and close the animation file
  152.     m_AnimateCtrl.Stop();
  153.     m_AnimateCtrl.Close();
  154.  
  155.     // Set the new style
  156.     ::SetWindowLong(m_AnimateCtrl.GetSafeHwnd(), GWL_STYLE, m_dwStyle);
  157.     // A call to SetWindowPos forces the window to re-read its style
  158.     m_AnimateCtrl.SetWindowPos(NULL, 0, 0, m_rectAnimateCtrl.Width(), m_rectAnimateCtrl.Height(),
  159.                                SWP_NOZORDER|SWP_NOMOVE|SWP_NOACTIVATE|SWP_SHOWWINDOW);
  160.  
  161.     m_AnimateCtrl.Open(m_cstrFileName);
  162.     // force repaint of the portion of the property page occupied by the control
  163.     InvalidateRect(&m_rectAnimateCtrl);
  164.     UpdateWindow();
  165. }
  166.  
  167.  
  168.