// animctrl.cpp : implementation file // // This is a part of the Microsoft Foundation Classes C++ library. // Copyright (C) 1992-1998 Microsoft Corporation // All rights reserved. // // This source code is only intended as a supplement to the // Microsoft Foundation Classes Reference and related // electronic documentation provided with the library. // See these sources for detailed information regarding the // Microsoft Foundation Classes product. #include "stdafx.h" #include "CmnCtrl1.h" #include "animctrl.h" #ifdef _DEBUG #undef THIS_FILE static char BASED_CODE THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CAnimateCtrlPage property page CAnimateCtrlPage::CAnimateCtrlPage() : CPropertyPage(CAnimateCtrlPage::IDD), m_dwStyle(WS_CHILD|WS_VISIBLE|ACS_CENTER) { //{{AFX_DATA_INIT(CAnimateCtrlPage) m_cstrFileName = _T(""); m_bCentered = TRUE; m_bTransparent = FALSE; m_bAutoplay = FALSE; //}}AFX_DATA_INIT m_psp.dwFlags &= ~PSP_HASHELP; // Lose the Help button } void CAnimateCtrlPage::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAnimateCtrlPage) DDX_Check(pDX, IDC_CENTER, m_bCentered); DDX_Check(pDX, IDC_TRANSPARENT, m_bTransparent); DDX_Check(pDX, IDC_AUTOPLAY, m_bAutoplay); DDX_Text(pDX, IDC_EDIT1, m_cstrFileName); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAnimateCtrlPage, CPropertyPage) //{{AFX_MSG_MAP(CAnimateCtrlPage) ON_EN_KILLFOCUS(IDC_EDIT1, OnFileChange) ON_BN_CLICKED(IDC_BROWSE, OnBrowse) ON_BN_CLICKED(IDC_CENTER, OnCenter) ON_BN_CLICKED(IDC_TRANSPARENT, OnTransparent) ON_BN_CLICKED(IDC_AUTOPLAY, OnAutoplay) ON_BN_CLICKED(IDC_PLAY, OnPlay) ON_BN_CLICKED(IDC_STOP, OnStop) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CAnimateCtrlPage message handlers BOOL CAnimateCtrlPage::OnInitDialog() { if(!CPropertyPage::OnInitDialog()) return FALSE; // Create animation control inside static frame. // This is necessary to avoid having the animation control // "overflow" the rectangle assigned to it when the // ACS_CENTER style is removed. CWnd* pFrame = GetDlgItem(IDC_ANIMFRAME); pFrame->GetClientRect(&m_rectAnimateCtrl); m_AnimateCtrl.Create(m_dwStyle, m_rectAnimateCtrl, pFrame, IDC_ANIMATE); return TRUE; } void CAnimateCtrlPage::OnFileChange() { UpdateData(); CFileStatus filestatus; if(CFile::GetStatus(m_cstrFileName, filestatus)) ApplyChanges(); } void CAnimateCtrlPage::OnBrowse() { CFileDialog dlg( TRUE,_T("AVI"),_T("*.AVI"), OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, _T("Animation (*.AVI)|*.AVI|")); if( dlg.DoModal()==IDOK ) { m_cstrFileName = dlg.GetPathName(); UpdateData(FALSE); ApplyChanges(); } } void CAnimateCtrlPage::OnCenter() { UpdateData(); if( m_bCentered ) m_dwStyle |= ACS_CENTER; else m_dwStyle &= ~ACS_CENTER; ApplyChanges(); } void CAnimateCtrlPage::OnTransparent() { UpdateData(); if( m_bTransparent ) m_dwStyle |= ACS_TRANSPARENT; else m_dwStyle &= ~ACS_TRANSPARENT; ApplyChanges(); } void CAnimateCtrlPage::OnAutoplay() { UpdateData(); if( m_bAutoplay ) m_dwStyle |= ACS_AUTOPLAY; else m_dwStyle &= ~ACS_AUTOPLAY; ApplyChanges(); } void CAnimateCtrlPage::OnPlay() { // From frame: 1, To frame: end (0xFFFF, or -1), // Play once (1) m_AnimateCtrl.Play(0,0xFFFF,1); } void CAnimateCtrlPage::OnStop() { m_AnimateCtrl.Stop(); } void CAnimateCtrlPage::ApplyChanges() { // Stop any current animation and close the animation file m_AnimateCtrl.Stop(); m_AnimateCtrl.Close(); // Set the new style ::SetWindowLong(m_AnimateCtrl.GetSafeHwnd(), GWL_STYLE, m_dwStyle); // A call to SetWindowPos forces the window to re-read its style m_AnimateCtrl.SetWindowPos(NULL, 0, 0, m_rectAnimateCtrl.Width(), m_rectAnimateCtrl.Height(), SWP_NOZORDER|SWP_NOMOVE|SWP_NOACTIVATE|SWP_SHOWWINDOW); m_AnimateCtrl.Open(m_cstrFileName); // force repaint of the portion of the property page occupied by the control InvalidateRect(&m_rectAnimateCtrl); UpdateWindow(); }