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
}