www.pudn.com > LECTEUR-MP3.zip > ControlView.cpp


// ControlView.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "MusGest.h" 
#include "ControlView.h" 
#include "OptionDlg.h" 
#include "MainFrm.h" 
#include "PlayListView.h" 
#include "FileView.h" 
 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
#define SIZE_X_DEFAULT_BAR 705 
#define SIZE_Y_DEFAULT_BAR 100 
 
///////////////////////////////////////////////////////////////////////////// 
// CControlView 
IMPLEMENT_DYNCREATE(CControlView, CColorFormView) 
 
CControlView::CControlView() 
	: CColorFormView(CControlView::IDD) 
{ 
	//{{AFX_DATA_INIT(CControlView) 
	//}}AFX_DATA_INIT 
 
	m_iWait = 0; 
	m_iCpt = 0; 
	m_pDoc = NULL; 
} 
 
CControlView::~CControlView() 
{ 
} 
 
void CControlView::DoDataExchange(CDataExchange* pDX) 
{ 
	CColorFormView::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CControlView) 
	//}}AFX_DATA_MAP 
} 
 
 
BEGIN_MESSAGE_MAP(CControlView, CColorFormView) 
	//{{AFX_MSG_MAP(CControlView) 
		ON_MESSAGE(WM_MAJ_TIME, OnMajTime) 
		ON_MESSAGE(WM_NEXT_FILE, OnEndFile) 
		ON_BN_CLICKED(IDC_OPTION, OnOption) 
		ON_BN_CLICKED(IDC_PLAY_PLAYLIST, OnPlayPlaylist) 
		ON_BN_CLICKED(IDC_PLAY_SELECTION, OnPlaySelection) 
		ON_BN_CLICKED(IDC_STOP, OnStop) 
		ON_BN_CLICKED(IDC_PAUSE, OnPause) 
		ON_BN_CLICKED(IDC_AR, OnRecule) 
		ON_BN_CLICKED(IDC_AV, OnAvance) 
	ON_WM_SIZE() 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CControlView diagnostics 
 
#ifdef _DEBUG 
void CControlView::AssertValid() const 
{ 
	CColorFormView::AssertValid(); 
} 
 
void CControlView::Dump(CDumpContext& dc) const 
{ 
	CColorFormView::Dump(dc); 
} 
#endif //_DEBUG 
 
///////////////////////////////////////////////////////////////////////////// 
// CControlView message handlers 
//------------------------------------------------------------------------------------- 
void CControlView::OnInitialUpdate() 
{ 
	m_pDoc = (CMusGestDoc*)GetDocument(); 
 
	if(!m_pDoc) 
		OutputDebugString("\n Pas de document"); 
 
	// ELLIPTIC BUTTON 
	HRGN r;  
	r = CreateEllipticRgn(0, 0, 100, 35); 
	m_BtnPause.Create( "Pause", WS_CHILD | WS_VISIBLE, CPoint(125, 55), r, this, IDC_PAUSE, 2, RGB(255,255,255)/*GetSysColor(COLOR_BTNFACE)*/, RGB(0, 255, 0), RGB(0, 255, 0), GetSysColor(COLOR_BTNFACE));  
	DeleteObject(r); 
 
	// ELLIPTIC BUTTON 
	r = CreateEllipticRgn(0, 0, 100, 35); 
	m_BtnPlayList.Create( "Jouer la playlist", WS_CHILD | WS_VISIBLE, CPoint(10, 10), r, this, IDC_PLAY_PLAYLIST, 2, /*GetSysColor(COLOR_BTNFACE)*/RGB(255,255,255), RGB(0, 255, 0), RGB(0, 255, 0), GetSysColor(COLOR_BTNFACE)); 
	DeleteObject(r); 
 
	// ELLIPTIC BUTTON 
	r = CreateEllipticRgn(0, 0, 100, 35); 
	m_BtnPlaySel.Create( "Jouer la selection", WS_CHILD | WS_VISIBLE, CPoint(10, 55), r, this, IDC_PLAY_SELECTION, 2, /*GetSysColor(COLOR_BTNFACE)*/RGB(255,255,255), RGB(0, 255, 0), RGB(0, 255, 0), GetSysColor(COLOR_BTNFACE)); 
	DeleteObject(r); 
 
	// ELLIPTIC BUTTON 
	r = CreateEllipticRgn(0, 0, 100, 35); 
	m_BtnStop.Create( "Stop", WS_CHILD | WS_VISIBLE, CPoint(125, 10), r, this, IDC_STOP, 2, /*GetSysColor(COLOR_BTNFACE)*/RGB(255,255,255), RGB(0, 255, 0), RGB(0, 255, 0), GetSysColor(COLOR_BTNFACE)); 
	DeleteObject(r); 
 
		// HELF_ELLIPSE: create left and right buttons splitting ellipse in half 
	HRGN rgnR = CreateRectRgn(0, 0, 127, 31); 
	HRGN rgnE = CreateEllipticRgn(0, 0, 127, 31); 
	OffsetRgn(rgnR, 63, 0); 
	CombineRgn(rgnE, rgnE, rgnR, RGN_DIFF); 
	m_BtnAr.Create("Recule", WS_CHILD | WS_VISIBLE, CPoint(380, 55), rgnE, this, IDC_AR, 2,/* GetSysColor(COLOR_BTNFACE)*/RGB(255,255,255), RGB(156, 175, 194), RGB(237, 175, 71), GetSysColor(COLOR_BTNFACE));  
 
	rgnR = CreateRectRgn(0, 0, 127, 31); 
	rgnE = CreateEllipticRgn(0, 0, 127, 31); 
	OffsetRgn(rgnR, -63, 0); 
	CombineRgn(rgnE, rgnE, rgnR, RGN_DIFF); 
	OffsetRgn(rgnE, -64, 0); 
	m_BtnAv.Create("Avance", WS_CHILD | WS_VISIBLE , CPoint(380 + 64, 55), rgnE, this, IDC_AV, 2, /*GetSysColor(COLOR_BTNFACE)*/RGB(255,255,255), RGB(156, 175, 194), RGB(237, 175, 71), GetSysColor(COLOR_BTNFACE));  
 
	// ELLIPTIC BUTTON 
	r = CreateEllipticRgn(0, 0, 100, 35); 
	m_BtnOption.Create( "Options", WS_CHILD | WS_VISIBLE, CPoint(620, 25), r, this, IDC_OPTION, 2, /*GetSysColor(COLOR_BTNFACE)*/RGB(255,255,255), RGB(0, 255, 0), RGB(0, 255, 0), GetSysColor(COLOR_BTNFACE)); 
	DeleteObject(r); 
 
	DeleteObject(rgnE); 
	DeleteObject(rgnR); 
 
	CRect rc; 
	rc.bottom = 50; 
	rc.left   = 300;  
	rc.top    = 20; 
	rc.right  = 580;  
 
	m_Slider.Create(TBS_LEFT, rc, this, IDC_SLIDER); 
	m_Slider.ShowWindow(true); 
	m_Slider.SetThumbColor(RGB(0,128,0)); 
 
	// set color to your form view 
	//SetBackgroundColor(RGB(255, 255, 255)); 
 
	// make the parent frame fit the form template 
	//GetParentFrame()->RecalcLayout(); 
	//ResizeParentToFit(); 
} 
 
//--------------------------------------------------------------------------------- 
void CControlView::SetFileTime(int iWait) 
{ 
	m_iWait = iWait; 
	m_iCpt = 0; 
	 
	m_Slider.SetPos(m_iCpt); 
	m_Slider.ClearTics(true); 
	m_Slider.SetRange(0,iWait); 
	m_Slider.SetTicFreq((iWait/10)); 
} 
 
//------------------------------------------------------------------------------------ 
void CControlView::OnOption()  
{ 
	COptionDlg dlg(this,m_pDoc); 
	dlg.DoModal(); 
} 
 
//------------------------------------------------------------------------------------ 
void CControlView::OnPlayPlaylist()  
{ 
	CMainFrame * pFrame = (CMainFrame*)GetParentFrame(); 
	CPlayListView * pPlayListView = NULL;	 
 
	if (pFrame) 
	{ 
		pPlayListView = (CPlayListView*)pFrame->GetRightView(1,0); 
		if (pPlayListView) 
			pPlayListView->OnPlayFile(); 
		 
	} 
} 
 
//------------------------------------------------------------------------------------ 
void CControlView::OnPlaySelection()  
{ 
	CMainFrame * pFrame = (CMainFrame*)GetParentFrame(); 
	CFileView * pFileView = NULL;	 
 
	if (pFrame) 
	{ 
		pFileView = (CFileView*)pFrame->GetRightView(0,0); 
		if (pFileView) 
		{ 
			pFileView->OnPlayFile(); 
			pFrame->GetLeftView()->PostMessage(WM_FOLDER_IN_PLAY,0); 
		} 
	}	 
} 
 
//------------------------------------------------------------------------------------ 
void CControlView::OnStop()  
{ 
	CMainFrame * pFrame = (CMainFrame*)GetParentFrame(); 
	CFileView * pFileView = NULL; 
	CPlayListView * pPlayListView = NULL;	 
 
	if (pFrame) 
	{ 
		//On ne sai pas ki joue donc on envoie un stopthread au deux 
		pFileView = (CFileView*)pFrame->GetRightView(0,0); 
		pPlayListView = (CPlayListView*)pFrame->GetRightView(1,0); 
 
		CRepFile * pPlayFile = NULL; 
 
		if (pFileView) 
			pPlayFile = pFileView->GetInPlayFile(); 
 
		if (!pPlayFile && pPlayListView) 
		{ 
			pPlayFile = pPlayListView->GetInPlayFile(); 
 
			if (pPlayFile) 
				if (m_pDoc->StopFile(pPlayFile) == SOUND_STOPPED) 
				{ 
					pPlayListView->PostMessage(WM_STOP_THREAD); 
					m_iCpt = 0; 
				} 
		} 
		else 
		{ 
			if (pPlayFile && pFileView) 
				if (m_pDoc->StopFile(pPlayFile) == SOUND_STOPPED) 
				{ 
					pFileView->PostMessage(WM_STOP_THREAD); 
					m_iCpt = 0; 
 
					pFrame->GetLeftView()->PostMessage(WM_FOLDER_IN_PLAY,1); 
				} 
		} 
 
		PostMessage(WM_NEXT_FILE); 
	} 
 
} 
 
//------------------------------------------------------------------------------------ 
void CControlView::OnPause()  
{ 
	CView * pView = GetInPlayView(); 
	if (pView) 
		pView->PostMessage(WM_PAUSE_SOUND); 
} 
 
 
//------------------------------------------------------------------------------------ 
void CControlView::OnRecule() 
{ 
	if (m_pDoc) 
		if (m_pDoc->ReculePos()) 
		{ 
			CSliderCtrl * pSlid = (CSliderCtrl*)GetDlgItem(IDC_SLIDER); 
 
			if (pSlid) 
			{ 
				m_iCpt -= 5000;  
				pSlid->SetPos(m_iCpt);	 
			} 
 
			CView * pView = GetInPlayView(); 
			if (pView) 
				pView->PostMessage(WM_CHANGE_SOUND_POS,(WPARAM)(-5000)); 
		} 
} 
 
//------------------------------------------------------------------------------------ 
void CControlView::OnAvance() 
{ 
	if (m_pDoc) 
		if(m_pDoc->AvancePos()) 
		{ 
			CSliderCtrl * pSlid = (CSliderCtrl*)GetDlgItem(IDC_SLIDER); 
 
			if (pSlid) 
			{ 
				m_iCpt += 5000;  
				pSlid->SetPos(m_iCpt);	 
			} 
 
			CView * pView = GetInPlayView(); 
			if (pView) 
				pView->PostMessage(WM_CHANGE_SOUND_POS,(WPARAM)5000); 
		} 
} 
 
//------------------------------------------------------------------------------------ 
CView * CControlView::GetInPlayView() 
{ 
	CMainFrame * pFrame = (CMainFrame*)GetParentFrame(); 
	CFileView * pFileView = (CFileView*)pFrame->GetRightView(0,0); 
	CPlayListView * pPlayListView = (CPlayListView*)pFrame->GetRightView(1,0); 
 
	CRepFile * pPlayFile = NULL; 
 
	if (pFileView) 
	{ 
		pPlayFile = pFileView->GetInPlayFile(); 
		if (pPlayFile)return pFileView; 
	} 
 
	if (!pPlayFile && pPlayListView) 
	{ 
		pPlayFile = pPlayListView->GetInPlayFile(); 
		return pPlayListView; 
	} 
 
	return NULL;	 
} 
 
//--------------------------------------------------------------------------------- 
LRESULT CControlView::OnMajTime(WPARAM w, LPARAM l) 
{ 
	CSliderCtrl * pSlid = (CSliderCtrl*)GetDlgItem(IDC_SLIDER); 
 
	if (pSlid) 
	{ 
		m_iCpt += 1000; //ajoute une seconde 
		pSlid->SetPos(m_iCpt);	 
	} 
	 
	return TRUE; 
} 
 
//------------------------------------------------------------------------------------- 
LRESULT CControlView::OnEndFile(WPARAM w, LPARAM l) 
{ 
	m_iCpt = 0; 
	CSliderCtrl * pSlid = (CSliderCtrl*)GetDlgItem(IDC_SLIDER); 
 
	if (pSlid) 
		pSlid->SetPos(0); 
 
	return TRUE; 
} 
 
//------------------------------------------------------------------------------------ 
void CControlView::OnSize(UINT nType, int cx, int cy)  
{ 
	CColorFormView::OnSize(nType, cx , cy); 
	 
	// TODO: Add your message handler code here 
}