⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dlglibrary.cpp

📁 Play file .mp3 music like window media player. Code is clearly.
💻 CPP
字号:
// DlgLibrary.cpp : implementation file
//

#include "stdafx.h"
#include "Media.h"
#include "DlgLibrary.h"
#include "dataPlaylist.h"
#include "dataSong.h"
#include "DlgCreatePL.h"
#include "MediaDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// DlgLibrary dialog


DlgLibrary::DlgLibrary(CWnd* pParent /*=NULL*/)
	: CDialog(DlgLibrary::IDD, pParent)
{
	//{{AFX_DATA_INIT(DlgLibrary)
	m_vPList = _T("");
	m_vLink = _T("");
	m_vGenre = _T("");
	m_vArtist = _T("");
	m_vAlbum = _T("");
	m_vTitle = _T("");
	m_vImage = _T("");
	//}}AFX_DATA_INIT
}


void DlgLibrary::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(DlgLibrary)
	DDX_Control(pDX, IDC_BUTTON_EDIT, m_bEdit);
	DDX_Control(pDX, IDC_BUTTON_DELETE, m_bDelete);
	DDX_Control(pDX, IDC_BUTTON_ADD, m_bAdd);
	DDX_Control(pDX, IDC_LIST_SONGS, m_lstSongs);
	DDX_Control(pDX, IDC_COMBO_PLIST, m_PlayList);
	DDX_CBString(pDX, IDC_COMBO_PLIST, m_vPList);
	DDX_Text(pDX, IDC_EDIT_LINK, m_vLink);
	DDX_Text(pDX, IDC_EDIT_GENRE, m_vGenre);
	DDX_Text(pDX, IDC_EDIT_ARTIST, m_vArtist);
	DDX_Text(pDX, IDC_EDIT_ALBUM, m_vAlbum);
	DDX_Text(pDX, IDC_EDIT_TITLE, m_vTitle);
	DDX_Text(pDX, IDC_EDIT_IMAGE, m_vImage);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(DlgLibrary, CDialog)
	//{{AFX_MSG_MAP(DlgLibrary)
	ON_CBN_SELCHANGE(IDC_COMBO_PLIST, OnSelchangeComboPlist)
	ON_LBN_SELCHANGE(IDC_LIST_SONGS, OnSelchangeListSongs)
	ON_BN_CLICKED(IDC_BUTTON_ADD, OnButtonAdd)
	ON_BN_CLICKED(IDC_BUTTON_DELETE, OnButtonDelete)
	ON_BN_CLICKED(IDC_BUTTON_EDIT, OnButtonEdit)
	ON_BN_CLICKED(IDC_BUTTON_EXIT, OnButtonExit)
	ON_BN_CLICKED(IDC_BUTTON_BROWSE, OnButtonBrowse)
	ON_WM_CLOSE()
	ON_BN_CLICKED(IDC_BUTTON_BROWSEIMAGE, OnButtonBrowseimage)
	ON_BN_CLICKED(IDC_BUTTON_CLEAR, OnButtonClear)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// DlgLibrary message handlers

void DlgLibrary::loadPlayList()
{
	int n = m_playlist.GetSize();
	for (int i=0; i<n; i++)
	{
		dataPlaylist * plist = (dataPlaylist *)m_playlist.ElementAt(i);
		m_PlayList.AddString(plist->name);
	}
}

BOOL DlgLibrary::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	width = 0;
	m_status_add = TRUE;

	m_bAdd.LoadBitmaps(IDB_BITMAP_ADD);
	m_bDelete.LoadBitmaps(IDB_BITMAP_DELETE);
	m_bEdit.LoadBitmaps(IDB_BITMAP_EDIT);

	DlgLibrary::loadPlayList();

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void DlgLibrary::OnSelchangeComboPlist() 
{
	// TODO: Add your control notification handler code here
	m_lstSongs.ResetContent();
	m_No = m_PlayList.GetCurSel();

	dataPlaylist * m_plist = (dataPlaylist *)m_playlist.ElementAt(m_No);
	m_arrSongs.RemoveAll();
	m_arrSongs.Copy(m_plist->arrSongs);

	DlgLibrary::loadLSongs();
}

BOOL DlgLibrary::checkExistPList(CString name)
{
	int n = m_playlist.GetSize();
	CString tmp;
	for(int i=0; i<n ; i++)
	{
		dataPlaylist * m_plist = (dataPlaylist *)m_playlist.ElementAt(i);
		tmp = m_plist->path;
		if(tmp == name)
		{
			m_No = i;
			return TRUE;
		}
	}
	return FALSE;
}

void DlgLibrary::loadLSongs()
{
	m_lstSongs.ResetContent();
	
	int n = m_arrSongs.GetSize();
	for (int i=0; i<n; i++)
	{
		dataSongs * m_data = (dataSongs *)m_arrSongs.ElementAt(i);
		DlgLibrary::AddString2List(m_data->getTitle());
	}
}

void DlgLibrary::OnSelchangeListSongs() 
{
	// TODO: Add your control notification handler code here
	int pos = m_lstSongs.GetCurSel();
	dataSongs * m_data = (dataSongs *)m_arrSongs.ElementAt(pos);

	SetDlgItemText(IDC_EDIT_LINK,m_data->getPath());
	SetDlgItemText(IDC_EDIT_TITLE,m_data->getTitle());
	SetDlgItemText(IDC_EDIT_ARTIST,m_data->getArtist());
	SetDlgItemText(IDC_EDIT_ALBUM,m_data->getAlbum());
	SetDlgItemText(IDC_EDIT_GENRE,m_data->getGenre());
	SetDlgItemText(IDC_EDIT_IMAGE,m_data->getImage());
}

void DlgLibrary::OnButtonAdd() 
{
	// TODO: Add your control notification handler code here
	if (m_status_add)	// Button is ADD
	{
		m_status_add = FALSE;	// Button is changed to APPLY & all editboxes are enabled
		m_status_exit = FALSE;
		
		SetDlgItemText(IDC_BUTTON_ADD,"Apply");
		m_bAdd.LoadBitmaps(IDB_BITMAP_SAVE);
		SetDlgItemText(IDC_BUTTON_EXIT,"Cancel");
		
		DlgLibrary::changeStatusEditBox(TRUE);
		
		m_vLink = "";
		m_vTitle = "";
		m_vArtist = "";
		m_vAlbum = "";
		m_vGenre = "";
		m_vImage = "";
		UpdateData(FALSE);
		
		if(MessageBox("Do you want to create a new playlist?","Update",MB_YESNO+MB_ICONQUESTION) == IDYES)
		{
			CDlgCreatePL pCreate = new CDlgCreatePL();
			if (pCreate.DoModal() == IDOK)
			{
				UpdateData(TRUE);
				CString tmp = pCreate.m_vFolder;
				tmp += "\\" + pCreate.m_vFileName + ".doc";
				
				if (checkExistPList(tmp) == FALSE)
				{
					m_No = m_playlist.GetSize();
					m_playlist.Add(new dataPlaylist(tmp,pCreate.m_vFileName));
					
					m_PlayList.AddString(pCreate.m_vFileName);
					m_PlayList.SetCurSel(m_No);

					m_lstSongs.ResetContent();
					m_arrSongs.RemoveAll();
				}
			}
		}
		else
		{
			MessageBox("Remember choosing the playlist first!");
			m_PlayList.SetCurSel(m_No);
		}

		GetDlgItem(IDC_BUTTON_DELETE)->ShowWindow(FALSE);
		GetDlgItem(IDC_BUTTON_EDIT)->ShowWindow(FALSE);
	}
	else
	{
		UpdateData(TRUE);	// Update data
		m_No = m_PlayList.GetCurSel();

		if (m_No != -1 && m_vLink != "")
		{
			if(MessageBox("Do you want to add this song?","Update",MB_YESNO+MB_ICONQUESTION) == IDYES)
			{
				CString tmp = "";
				
				dataPlaylist * m_plist = (dataPlaylist *)m_playlist.ElementAt(m_No);
				m_plist->arrSongs.Add(new dataSongs(m_vLink,m_vTitle,m_vArtist,m_vAlbum,m_vGenre,m_vImage));

				tmp.Format("%s",m_vTitle);
				m_arrSongs.Add(new dataSongs(m_vLink,m_vTitle,m_vArtist,m_vAlbum,m_vGenre,m_vImage));
				DlgLibrary::AddString2List(tmp);	// Add song to playlist
					
				m_vLink = "";
				m_vTitle = "";
				m_vArtist = "";
				m_vAlbum = "";
				m_vGenre = "";
				m_vImage = "";
					
				UpdateData(FALSE);

				if (MessageBox("Do you want to add other song?","Update",MB_YESNO+MB_ICONQUESTION) == IDNO)
				{
					m_status_exit = FALSE;
					m_bAdd.LoadBitmaps(IDB_BITMAP_ADD);
					DlgLibrary::OnButtonExit();
				}
			}
		}
		else
		{
			if (m_No == -1)
			{
				MessageBox("You didn't choose any playlist to add the song !!!");
			}
			else
			{
				MessageBox("You didn't choose any song to add !!!");
			}
		}
	}
}

void DlgLibrary::OnButtonDelete() 
{
	// TODO: Add your control notification handler code here
	if (m_lstSongs.GetCurSel() == LB_ERR)
	{
		MessageBox("You have to select the song first!","Question",MB_OK+MB_ICONQUESTION);
	}
	else
	{
		if (MessageBox("Do you want to delete this song?","Remove",MB_YESNO+MB_ICONQUESTION) == IDYES)
		{
			int a = m_lstSongs.GetCurSel();
			
			// Delete data in Playlist
			m_lstSongs.DeleteString(a);
			m_arrSongs.RemoveAt(a);
			
			dataPlaylist * m_plist = (dataPlaylist *)m_playlist.ElementAt(m_No);
			m_plist->arrSongs.RemoveAt(a);

			UpdateData(TRUE);
			
			m_vLink = "";
			m_vTitle = "";
			m_vArtist = "";
			m_vAlbum = "";
			m_vGenre = "";
			m_vImage = "";
			
			UpdateData(FALSE);
		}
	}
}

void DlgLibrary::OnButtonEdit() 
{
	// TODO: Add your control notification handler code here
	if (m_status_edit)
	{
		int n = m_lstSongs.GetCurSel();
		
		if (n == LB_ERR)
		{
			MessageBox("You have to select the song first!","Question",MB_OK+MB_ICONQUESTION);
			m_status_exit = FALSE;
			DlgLibrary::OnButtonExit();
		}
		else
		{
			m_status_edit = FALSE;
			m_status_exit = FALSE;
			
			SetDlgItemText(IDC_BUTTON_EXIT,"Cancel");
			SetDlgItemText(IDC_BUTTON_EDIT,"Apply");
			m_bEdit.LoadBitmaps(IDB_BITMAP_SAVE);
			MessageBox("Please edit all information you want and press SAVE button");
			
			GetDlgItem(IDC_BUTTON_ADD)->ShowWindow(FALSE);
			GetDlgItem(IDC_BUTTON_DELETE)->ShowWindow(FALSE);
			
			DlgLibrary::changeStatusEditBox(TRUE);

			UpdateData(TRUE);
			if (m_vImage != "")
			{
				GetDlgItem(IDC_BUTTON_CLEAR)->EnableWindow(TRUE);
			}
			UpdateData(FALSE);
		}
	}
	else
	{
		int a = m_lstSongs.GetCurSel();
		
		dataPlaylist * m_plist = (dataPlaylist *)m_playlist.ElementAt(m_No);
		dataSongs * m_data = (dataSongs *)m_plist->arrSongs.ElementAt(a);
		
		if(MessageBox("Do you want to edit this song?","Update",MB_YESNO+MB_ICONQUESTION) == IDYES)
		{
			UpdateData(TRUE);	// Update data
			
			m_lstSongs.DeleteString(a);
			m_plist->arrSongs.RemoveAt(a);
			m_arrSongs.RemoveAt(a);
			
			CString tmp = "";
			tmp.Format("%s",m_vTitle);
			
			m_lstSongs.InsertString(a,tmp);	// Insert data to Playlist
			
			m_plist->arrSongs.InsertAt(a,new dataSongs(m_vLink,m_vTitle,m_vArtist,m_vAlbum,m_vGenre,m_vImage));
			m_arrSongs.InsertAt(a,new dataSongs(m_vLink,m_vTitle,m_vArtist,m_vAlbum,m_vGenre,m_vImage));

			m_status_edit = TRUE;
			m_status_exit = FALSE;
			
			SetDlgItemText(IDC_BUTTON_EXIT,"Exit");
			SetDlgItemText(IDC_BUTTON_EDIT,"Edit");
			m_bEdit.LoadBitmaps(IDB_BITMAP_EDIT);
			DlgLibrary::OnButtonExit();

			GetDlgItem(IDC_BUTTON_ADD)->ShowWindow(TRUE);
			GetDlgItem(IDC_BUTTON_DELETE)->ShowWindow(TRUE);
			
			DlgLibrary::changeStatusEditBox(FALSE);
			DlgLibrary::loadLSongs();
		}
		else
		{
			m_vLink = m_data->getPath();
			m_vTitle = m_data->getTitle();
			m_vArtist = m_data->getArtist();
			m_vAlbum = m_data->getAlbum();
			m_vGenre = m_data->getGenre();
			m_vImage = m_data->getImage();
			
			UpdateData(FALSE);
		}
	}
}

void DlgLibrary::OnButtonExit() 
{
	// TODO: Add your control notification handler code here
	if (m_status_exit)
	{
		DlgLibrary::OnClose();
		OnOK();
	}
	else
	{
		m_status_exit = TRUE;
		m_status_add = TRUE;
		m_status_edit = TRUE;
		
		m_bAdd.LoadBitmaps(IDB_BITMAP_ADD);
		m_bEdit.LoadBitmaps(IDB_BITMAP_EDIT);

		SetDlgItemText(IDC_BUTTON_EXIT,"Exit");
		SetDlgItemText(IDC_BUTTON_ADD,"Add");
		SetDlgItemText(IDC_BUTTON_EDIT,"Edit");
		
		GetDlgItem(IDC_BUTTON_ADD)->ShowWindow(TRUE);
		GetDlgItem(IDC_BUTTON_DELETE)->ShowWindow(TRUE);
		GetDlgItem(IDC_BUTTON_EDIT)->ShowWindow(TRUE);
		
		DlgLibrary::changeStatusEditBox(FALSE);
	}
}

void DlgLibrary::changeStatusEditBox(BOOL status)
{
	GetDlgItem(IDC_BUTTON_BROWSE)->EnableWindow(status);
	GetDlgItem(IDC_EDIT_TITLE)->EnableWindow(status);
	GetDlgItem(IDC_EDIT_ARTIST)->EnableWindow(status);
	GetDlgItem(IDC_EDIT_ALBUM)->EnableWindow(status);
	GetDlgItem(IDC_EDIT_GENRE)->EnableWindow(status);
	GetDlgItem(IDC_BUTTON_BROWSEIMAGE)->EnableWindow(status);
	GetDlgItem(IDC_BUTTON_CLEAR)->EnableWindow(status);
}

void DlgLibrary::OnButtonBrowse() 
{
	// TODO: Add your control notification handler code here
	CFileDialog m_File(TRUE,".mp3",m_vLink,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Music Files (*.MP3)|*.mp3||");
	
	if(m_File.DoModal() == IDOK)
	{
		UpdateData(TRUE);
		
		m_vLink = m_File.GetPathName(); 
		m_vTitle = m_File.GetFileTitle();
		
		UpdateData(FALSE);
	}
}

void DlgLibrary::OnClose() 
{
	// TODO: Add your message handler code here and/or call default
	int n = m_playlist.GetSize();

	for (int i=0; i<n; i++)
	{
		dataPlaylist * m_plist = (dataPlaylist *)m_playlist.ElementAt(i);
		CString path = m_plist->path;		
		DlgLibrary::WriteToFile(path,i);
	}

	m_playlist.FreeExtra();
	((CMediaDlg *)GetParent())->m_Playlists.RemoveAll();
	((CMediaDlg *)GetParent())->m_Playlists.Copy(m_playlist);
	((CMediaDlg *)GetParent())->loadPlayList();

	CDialog::OnClose();
}

void DlgLibrary::OnButtonBrowseimage() 
{
	// TODO: Add your control notification handler code here
	CFileDialog m_File(TRUE,".bmp",m_vLink,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Music Files (*.BMP)|*.bmp||");
	
	if(m_File.DoModal() == IDOK)
	{
		UpdateData(TRUE);
		m_vImage = m_File.GetPathName(); 
		UpdateData(FALSE);

		GetDlgItem(IDC_BUTTON_CLEAR)->EnableWindow(TRUE);
	}
}

void DlgLibrary::updateWidth(LPCTSTR s)
{
	CClientDC dc(this);
	CFont * f = m_lstSongs.GetFont();
	dc.SelectObject(f);
	CSize sz = dc.GetTextExtent(s, _tcslen(s));
	sz.cx += 3 * ::GetSystemMetrics(SM_CXBORDER);
	
	if(sz.cx > width)
	{
		width = sz.cx;
		m_lstSongs.SetHorizontalExtent(width);
	}
}

int DlgLibrary::AddString2List(LPCTSTR s)
{
	int result = m_lstSongs.AddString(s);
	if(result < 0)
		return result;
	
	updateWidth(s);
    return result;
}

void DlgLibrary::OnButtonClear() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	m_vImage = "";
	UpdateData(FALSE);

	GetDlgItem(IDC_BUTTON_CLEAR)->EnableWindow(FALSE);
}

void DlgLibrary::WriteToFile(CString filename, int no)
{
	dataPlaylist * m_plist = (dataPlaylist *)m_playlist.ElementAt(no);
	
	CFile cfFile(filename, CFile::modeCreate | CFile::modeReadWrite);
	CArchive ar (&cfFile, CArchive::store);
	
	int n = m_plist->arrSongs.GetSize();
	for (int i=0; i<n; i++)
	{
		CString tmp = "";
		dataSongs * m_data = (dataSongs *)m_plist->arrSongs.GetAt(i);
		
		tmp += m_data->getPath() + "#" + m_data->getTitle() + "#" + m_data->getArtist() + "#" + m_data->getAlbum() + "#" + m_data->getGenre() + "#" + m_data->getImage();
		ar.WriteString(tmp); ar.WriteString(_T("\n"));
	}
	ar.Close();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -