// AniListPaneView.cpp : ±¸Çö ÆÄÀÏÀÔ´Ï´Ù. // #include "stdafx.h" #include "EtViewer.h" #include "AniListPaneView.h" #include "UserMessage.h" #include "ObjectBase.h" // CAniListPaneView IMPLEMENT_DYNCREATE(CAniListPaneView, CFormView) CAniListPaneView::CAniListPaneView() : CFormView(CAniListPaneView::IDD) , m_nEditFPS((int)CObjectSkin::s_fFramePerSec) { m_bActivate = false; m_pObject = NULL; } CAniListPaneView::~CAniListPaneView() { } void CAniListPaneView::DoDataExchange(CDataExchange* pDX) { CFormView::DoDataExchange(pDX); DDX_Control(pDX, IDC_BUTTON1, m_Rewind); DDX_Control(pDX, IDC_BUTTON2, m_Prev); DDX_Control(pDX, IDC_BUTTON3, m_Play); DDX_Control(pDX, IDC_BUTTON4, m_Next); DDX_Control(pDX, IDC_BUTTON5, m_Forward); DDX_Control(pDX, IDC_BUTTON6, m_Loop); DDX_Control(pDX, IDC_BUTTON7, m_NoLoop); DDX_Control(pDX, IDC_BUTTON8, m_Pause); DDX_Control(pDX, IDC_STATIC_PROGRESS, m_StaticFrame); DDX_Control(pDX, IDC_EDIT1, m_EditFps); DDX_Control(pDX, IDC_SLIDER1, m_Slider); DDX_Text(pDX, IDC_EDIT1, m_nEditFPS); } BEGIN_MESSAGE_MAP(CAniListPaneView, CFormView) ON_MESSAGE( UM_ANICONTROL_REFRESH, OnRefresh ) ON_MESSAGE( UM_ANICONTROL_UPDATE_FRAME, OnUpdateFrame ) ON_MESSAGE( UM_ANICONTROL_ACCEL_KEY, OnAccelKey ) ON_BN_CLICKED(IDC_BUTTON1, &CAniListPaneView::OnBnClickedButtonRewind) ON_BN_CLICKED(IDC_BUTTON2, &CAniListPaneView::OnBnClickedButtonPrev) ON_BN_CLICKED(IDC_BUTTON3, &CAniListPaneView::OnBnClickedButtonPlay) ON_BN_CLICKED(IDC_BUTTON4, &CAniListPaneView::OnBnClickedButtonNext) ON_BN_CLICKED(IDC_BUTTON5, &CAniListPaneView::OnBnClickedButtonForward) ON_BN_CLICKED(IDC_BUTTON6, &CAniListPaneView::OnBnClickedButtonLoop) ON_BN_CLICKED(IDC_BUTTON7, &CAniListPaneView::OnBnClickedButtonNoLoop) ON_BN_CLICKED(IDC_BUTTON8, &CAniListPaneView::OnBnClickedButtonPause) ON_WM_HSCROLL() ON_EN_CHANGE(IDC_EDIT1, &CAniListPaneView::OnEnChangeEdit1) END_MESSAGE_MAP() // CAniListPaneView Áø´ÜÀÔ´Ï´Ù. #ifdef _DEBUG void CAniListPaneView::AssertValid() const { CFormView::AssertValid(); } #ifndef _WIN32_WCE void CAniListPaneView::Dump(CDumpContext& dc) const { CFormView::Dump(dc); } #endif #endif //_DEBUG // CAniListPaneView ¸Þ½ÃÁö 󸮱âÀÔ´Ï´Ù. float fround( float Value, int n = 1 ); float fround( float Value, int n ) { Value = Value * pow(10.f,n); if( Value >= 0 ) { if( Value - (int)Value >= 0.5 ) Value++; } if( Value < 0 ) { if( Value - (int)Value < -0.5 ) Value--; } Value = (int)Value/pow(10.f,n); return Value; } void CAniListPaneView::OnInitialUpdate() { CFormView::OnInitialUpdate(); // TODO: ¿©±â¿¡ Ư¼öÈ­µÈ Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº» Ŭ·¡½º¸¦ È£ÃâÇÕ´Ï´Ù. if( m_bActivate == true ) return; m_bActivate = true; CBitmap bitmap; bitmap.LoadBitmap( IDB_PLAY ); CImageList ImageList; ImageList.Create( 16, 16, ILC_COLOR24|ILC_MASK, 7, 1 ); ImageList.Add( &bitmap, RGB(0,255,0) ); m_Rewind.SetIcon( CSize( 16, 16 ), ImageList.ExtractIcon(0) ); m_Prev.SetIcon( CSize( 16, 16 ), ImageList.ExtractIcon(1) ); m_Play.SetIcon( CSize( 16, 16 ), ImageList.ExtractIcon(2) ); m_Next.SetIcon( CSize( 16, 16 ), ImageList.ExtractIcon(3) ); m_Forward.SetIcon( CSize( 16, 16 ), ImageList.ExtractIcon(4) ); m_Pause.SetIcon( CSize( 16, 16 ), ImageList.ExtractIcon(5) ); m_NoLoop.SetIcon( CSize( 16, 16 ), ImageList.ExtractIcon(6) ); m_Loop.SetIcon( CSize( 16, 16 ), ImageList.ExtractIcon(7) ); m_Pause.ShowWindow( SW_HIDE ); m_Loop.ShowWindow( SW_HIDE ); EnableControl( false ); } LRESULT CAniListPaneView::OnRefresh( WPARAM wParam, LPARAM lParam ) { if( m_pObject ) { m_pObject->Stop(); m_pObject->LinkAniInfo( false ); } m_pObject = (CObjectAnimation*)wParam; if( m_pObject == NULL ) { EnableControl( FALSE ); return S_OK; } // ¾Ö´Ï Ŭ¸¯ÇÒ¶§ ÀÚµ¿Àç»ýÇÏ´Â ±â´É »èÁ¦. //m_pObject->Stop(); //m_pObject->Resume(); //m_pObject->Play( m_pObject->GetCurAniIndex() ); m_pObject->LinkAniInfo( true ); EnableControl( TRUE ); m_Loop.ShowWindow( SW_SHOW ); m_NoLoop.ShowWindow( SW_HIDE ); m_Pause.ShowWindow( SW_SHOW ); m_Play.ShowWindow( SW_HIDE ); CString szStr; szStr.Format( "%3d/%3d", (int)fround( m_pObject->GetCurFrame() ), m_pObject->GetTotalFrame() - 1 ); m_StaticFrame.SetWindowText( szStr ); m_StaticFrame.UpdateData( TRUE ); m_Slider.SetRange( 0, m_pObject->GetTotalFrame() - 1, TRUE ); m_Slider.SetPos( m_pObject->GetCurFrame() ); return S_OK; } void CAniListPaneView::EnableControl( bool bEnable ) { m_Rewind.EnableWindow( bEnable ); m_Prev.EnableWindow( bEnable ); m_Play.EnableWindow( bEnable ); m_Pause.EnableWindow( bEnable ); m_Next.EnableWindow( bEnable ); m_Forward.EnableWindow( bEnable ); m_Loop.EnableWindow( bEnable ); m_NoLoop.EnableWindow( bEnable ); m_StaticFrame.EnableWindow( bEnable ); m_EditFps.EnableWindow( bEnable ); m_Slider.EnableWindow( bEnable ); } void CAniListPaneView::OnBnClickedButtonRewind() { if( !m_pObject ) return; int nCurAni = m_pObject->GetCurAniIndex() - 1; if( nCurAni <= 0 ) nCurAni = 0; m_pObject->Play( nCurAni, GetLoopCount() ); OnRefresh( (WPARAM)m_pObject, 0 ); } void CAniListPaneView::OnBnClickedButtonPrev() { if( !m_pObject ) return; float fCurFrame = m_pObject->GetCurFrame() - 1.f; if( fCurFrame <= 0 ) fCurFrame = 0.f; m_pObject->SetCurFrame( fCurFrame ); } void CAniListPaneView::OnBnClickedButtonPlay() { m_Play.ShowWindow( SW_HIDE ); m_Pause.ShowWindow( SW_SHOW ); if( !m_pObject ) return; if( m_pObject->IsPause() ) { m_pObject->Resume(); } else { m_pObject->Play( m_pObject->GetCurAniIndex(), GetLoopCount() ); } } void CAniListPaneView::OnBnClickedButtonPause() { m_Play.ShowWindow( SW_SHOW ); m_Pause.ShowWindow( SW_HIDE ); if( !m_pObject ) return; m_pObject->Pause(); } void CAniListPaneView::OnBnClickedButtonNext() { if( !m_pObject ) return; float fCurFrame = m_pObject->GetCurFrame() + 1.f; if( fCurFrame >= (float)m_pObject->GetTotalFrame() - 1 ) fCurFrame = (float)m_pObject->GetTotalFrame() - 1; m_pObject->SetCurFrame( fCurFrame ); } void CAniListPaneView::OnBnClickedButtonForward() { if( !m_pObject ) return; int nCurAni = m_pObject->GetCurAniIndex() + 1; if( nCurAni >= m_pObject->GetTotalAniIndex() - 1 ) nCurAni = m_pObject->GetTotalAniIndex() - 1; m_pObject->Play( nCurAni, GetLoopCount() ); OnRefresh( (WPARAM)m_pObject, 0 ); } void CAniListPaneView::OnBnClickedButtonLoop() { m_Loop.ShowWindow( SW_HIDE ); m_NoLoop.ShowWindow( SW_SHOW ); if( !m_pObject ) return; if( m_pObject->IsPlay() || m_pObject->IsPause() ) m_pObject->SetLoopCount( 1000000 ); } void CAniListPaneView::OnBnClickedButtonNoLoop() { m_NoLoop.ShowWindow( SW_HIDE ); m_Loop.ShowWindow( SW_SHOW ); if( !m_pObject ) return; if( m_pObject->IsPlay() || m_pObject->IsPause() ) m_pObject->SetLoopCount( 1 ); } LRESULT CAniListPaneView::OnUpdateFrame( WPARAM wParam, LPARAM lParam ) { CString szStr, szTemp; szStr.Format( "%3d/%3d", (int)fround( m_pObject->GetCurFrame() ), m_pObject->GetTotalFrame() - 1 ); m_StaticFrame.GetWindowText( szTemp ); if( strcmp( szStr, szTemp ) != NULL ) { m_StaticFrame.SetWindowText( szStr ); m_StaticFrame.UpdateData( TRUE ); m_Slider.SetPos( (int)m_pObject->GetCurFrame() ); } if( m_pObject->IsPlay() && !m_pObject->IsPause() ) { m_Play.ShowWindow( SW_HIDE ); m_Pause.ShowWindow( SW_SHOW ); } else { m_Play.ShowWindow( SW_SHOW ); m_Pause.ShowWindow( SW_HIDE ); } return S_OK; } int CAniListPaneView::GetLoopCount() { int nLoopCount = 1; if( m_NoLoop.IsWindowVisible() == TRUE ) nLoopCount = 10000000; return nLoopCount; } void CAniListPaneView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { // TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº»°ªÀ» È£ÃâÇÕ´Ï´Ù. CFormView::OnHScroll(nSBCode, nPos, pScrollBar); if( pScrollBar->m_hWnd == m_Slider.m_hWnd ) { if( !m_pObject ) return; m_pObject->Pause(); m_pObject->SetCurFrame( (float)m_Slider.GetPos() ); CString szStr; szStr.Format( "%3d/%3d", (int)fround( m_pObject->GetCurFrame() ), m_pObject->GetTotalFrame() - 1 ); m_StaticFrame.SetWindowText( szStr ); m_StaticFrame.UpdateData( TRUE ); } } void CAniListPaneView::OnEnChangeEdit1() { // m_EditFps.UpdateData( FALSE ); if( m_EditFps ) { UpdateData(); CObjectSkin::s_fFramePerSec = (float)m_nEditFPS; } } LRESULT CAniListPaneView::OnAccelKey( WPARAM wParam, LPARAM lParam ) { if( m_pObject == NULL ) return S_OK; switch( (int)wParam ) { case 0: if( m_pObject->IsPlay() && !m_pObject->IsPause() ) OnBnClickedButtonPause(); else OnBnClickedButtonPlay(); break; case 1: OnBnClickedButtonRewind(); break; case 2: OnBnClickedButtonForward(); break; case 3: if( !m_pObject->IsPause() ) OnBnClickedButtonPause(); OnBnClickedButtonPrev(); break; case 4: if( !m_pObject->IsPause() ) OnBnClickedButtonPause(); OnBnClickedButtonNext(); break; } return S_OK; }