// MusicOpenFileDlg.cpp : implementation file // #include "stdafx.h" #include "musicplayer.h" #include "MusicOpenFileDlg.h" #include #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CMusicOpenFileDlg dialog CMusicOpenFileDlg::CMusicOpenFileDlg(CWnd* pParent /*=NULL*/) : CDialog(CMusicOpenFileDlg::IDD, pParent) { //{{AFX_DATA_INIT(CMusicOpenFileDlg) //}}AFX_DATA_INIT // 初始化背景画刷 CBitmap tmpBmp; // 从资源中加载背景图片 tmpBmp.LoadBitmap(IDB_FILEVIEW_WND); m_BgDC.CreateCompatibleDC(NULL); m_BgDC.SelectObject(&tmpBmp); tmpBmp.DeleteObject(); m_txtFont.CreateFont(18,0,0,0,FW_BOLD,0,0,0,GB2312_CHARSET,OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,_T("Arial")); m_NumberDir = 0; // 当前目录下目录总数 m_CurrentPossion = 0; // 当前位置 // 根目录路径 m_FilePath = L"\\Storage Card"; m_File.Empty(); } CMusicOpenFileDlg::~CMusicOpenFileDlg() { m_BgDC.DeleteDC(); m_txtFont.DeleteObject(); } void CMusicOpenFileDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CMusicOpenFileDlg) DDX_Control(pDX, IDC_BUTTON6, m_lab6); DDX_Control(pDX, IDC_BUTTON5, m_lab5); DDX_Control(pDX, IDC_BUTTON4, m_lab4); DDX_Control(pDX, IDC_BUTTON3, m_lab3); DDX_Control(pDX, IDC_BUTTON2, m_lab2); DDX_Control(pDX, IDC_BUTTON1, m_lab1); DDX_Control(pDX, IDC_BUTTON_MUSIC_BACK, m_butBack); DDX_Control(pDX, IDC_BUTTON_MUSIC_UP, m_butUp); DDX_Control(pDX, IDC_BUTTON_MUSIC_PLAY, m_butPlay); DDX_Control(pDX, IDC_BUTTON_MUSIC_FILE, m_butExit); DDX_Control(pDX, IDC_BUTTON_MUSIC_DOWN, m_butDown); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CMusicOpenFileDlg, CDialog) //{{AFX_MSG_MAP(CMusicOpenFileDlg) ON_WM_ERASEBKGND() ON_WM_PAINT() ON_BN_CLICKED(IDC_BUTTON_MUSIC_BACK, OnButtonMusicBack) ON_BN_CLICKED(IDC_BUTTON_MUSIC_DOWN, OnButtonMusicDown) ON_BN_CLICKED(IDC_BUTTON_MUSIC_FILE, OnButtonMusicFile) ON_BN_CLICKED(IDC_BUTTON_MUSIC_PLAY, OnButtonMusicPlay) ON_BN_CLICKED(IDC_BUTTON_MUSIC_UP, OnButtonMusicUp) ON_BN_CLICKED(IDC_BUTTON1, OnButton1) ON_BN_CLICKED(IDC_BUTTON2, OnButton2) ON_BN_CLICKED(IDC_BUTTON3, OnButton3) ON_BN_CLICKED(IDC_BUTTON4, OnButton4) ON_BN_CLICKED(IDC_BUTTON5, OnButton5) ON_BN_CLICKED(IDC_BUTTON6, OnButton6) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CMusicOpenFileDlg message handlers BOOL CMusicOpenFileDlg::OnInitDialog() { CDialog::OnInitDialog(); CenterWindow(this); // center to the hpc screen // TODO: Add extra initialization here // 设置窗口大小 MoveWindow(0,0,320,240); m_butExit.MoveWindow(285,8,25,25); m_butExit.LoadBitmaps(IDB_FILEVIEW_CLOSE,IDB_FILEVIEW_CLOSED); m_butUp.MoveWindow(271,37,46,46); m_butUp.LoadBitmaps(IDB_FILEVIEW_UP,IDB_FILEVIEW_UPD,NULL,IDB_FILEVIEW_UPDIS); m_butUp.EnableWindow(FALSE); m_butDown.MoveWindow(271,87,46,46); m_butDown.LoadBitmaps(IDB_FILEVIEW_NEXT,IDB_FILEVIEW_NEXTD,NULL,IDB_FILEVIEW_NEXTDIS); m_butDown.EnableWindow(FALSE); m_butBack.MoveWindow(271,137,46,46); m_butBack.LoadBitmaps(IDB_FILEVIEW_BACK,IDB_FILEVIEW_BACKD,NULL,IDB_FILEVIEW_NEXTDIS); m_butPlay.MoveWindow(271,187,46,46); m_butPlay.LoadBitmaps(IDB_FILEVIEW_PLAY,IDB_FILEVIEW_PLAYD,NULL,IDB_FILEVIEW_PLAYDIS); m_butPlay.EnableWindow(FALSE); m_lab1.MoveWindow(24,51,60,80); m_lab1.LoadIcon(IDB_ICON_MUSIC,IDB_ICON_MUSICD,IDB_FILEVIEW_WND,RGB(0,0,0)); m_lab2.MoveWindow(107,51,60,80); m_lab2.LoadIcon(IDB_ICON_MUSIC,IDB_ICON_MUSICD,IDB_FILEVIEW_WND,RGB(0,0,0)); m_lab3.MoveWindow(189,51,60,80); m_lab3.LoadIcon(IDB_ICON_MUSIC,IDB_ICON_MUSICD,IDB_FILEVIEW_WND,RGB(0,0,0)); m_lab4.MoveWindow(24,134,60,80); m_lab4.LoadIcon(IDB_ICON_MUSIC,IDB_ICON_MUSICD,IDB_FILEVIEW_WND,RGB(0,0,0)); m_lab5.MoveWindow(107,134,60,80); m_lab5.LoadIcon(IDB_ICON_MUSIC,IDB_ICON_MUSICD,IDB_FILEVIEW_WND,RGB(0,0,0)); m_lab6.MoveWindow(189,134,60,80); m_lab6.LoadIcon(IDB_ICON_MUSIC,IDB_ICON_MUSICD,IDB_FILEVIEW_WND,RGB(0,0,0)); ScanFile(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } BOOL CMusicOpenFileDlg::OnEraseBkgnd(CDC* pDC) { // TODO: Add your message handler code here and/or call default return FALSE; //return CDialog::OnEraseBkgnd(pDC); } void CMusicOpenFileDlg::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: Add your message handler code here dc.BitBlt(0,0,320,240,&m_BgDC,0,0,SRCCOPY); dc.SelectObject(&m_txtFont); dc.SetBkMode(TRANSPARENT); dc.SetTextColor(RGB(255,255,255)); dc.DrawText(m_TitleTxt,CRect(43,4,320,32),DT_LEFT|DT_VCENTER); // Do not call CDialog::OnPaint() for painting messages } void CMusicOpenFileDlg::OnButtonMusicBack() { // TODO: Add your control notification handler code here CString str = m_FilePath; str.MakeLower(); if (str != L"\\storage card") { m_lab1.SetChecked(false); m_lab2.SetChecked(false); m_lab3.SetChecked(false); m_lab4.SetChecked(false); m_lab5.SetChecked(false); m_lab6.SetChecked(false); CString strFileName = m_FilePath; strFileName.MakeLower(); CString FileExt; FileExt.Empty(); // 文件名长度 int strLen = strFileName.GetLength() - 1; for(int i = strLen; i >= 0; i--) { // 查找文件名中最好一个'.' if(strFileName.GetAt(i) == '\\') { // 提取文件扩展名 FileExt = strFileName.Left(i); break; } } m_FilePath = FileExt; ScanFile(); } } void CMusicOpenFileDlg::OnButtonMusicDown() { // TODO: Add your control notification handler code here ShowFiles(m_CurrentPossion); } void CMusicOpenFileDlg::OnButtonMusicFile() { // TODO: Add your control notification handler code here EndDialog(IDCANCEL); } void CMusicOpenFileDlg::OnButtonMusicPlay() { // TODO: Add your control notification handler code here if (m_lab1.GetChecked()) { m_File = m_FilePath + L"\\" + m_lab1.GetButtonTitle(); EndDialog(IDOK); } else if (m_lab2.GetChecked()) { m_File = m_FilePath + L"\\" + m_lab2.GetButtonTitle(); EndDialog(IDOK); } else if (m_lab3.GetChecked()) { m_File = m_FilePath + L"\\" + m_lab3.GetButtonTitle(); EndDialog(IDOK); } else if (m_lab4.GetChecked()) { m_File = m_FilePath + L"\\" + m_lab4.GetButtonTitle(); EndDialog(IDOK); } else if (m_lab5.GetChecked()) { m_File = m_FilePath + L"\\" + m_lab5.GetButtonTitle(); EndDialog(IDOK); } else if (m_lab6.GetChecked()) { m_File = m_FilePath + L"\\" + m_lab6.GetButtonTitle(); EndDialog(IDOK); } else { m_File.Empty(); } } void CMusicOpenFileDlg::OnButtonMusicUp() { // TODO: Add your control notification handler code here int tmpPossion = 0; if (m_CurrentPossion - 12 > 0) { if (m_CurrentPossion == m_FileNames.GetUpperBound() + 1) { tmpPossion = m_CurrentPossion - ((m_FileNames.GetUpperBound() + 1) % 6) - 6; } else { tmpPossion = m_CurrentPossion - 12; } } else { tmpPossion = 0; } ShowFiles(tmpPossion); } void CMusicOpenFileDlg::ScanFile() { CString sSearchFile = m_FilePath + _T("\\*.*"); CString sFileName; CStringArray tmpDir; CStringArray tmpFile; int i = 0; tmpDir.RemoveAll(); tmpFile.RemoveAll(); m_FileNames.RemoveAll(); WIN32_FIND_DATA fd; // 查找文件信息 // 查找文件 HANDLE hFindFile = FindFirstFile(sSearchFile,&fd); if(hFindFile != INVALID_HANDLE_VALUE) { if (!(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { if (IsAvailabFormat(fd.cFileName)) { tmpFile.Add(fd.cFileName); } } else { tmpDir.Add(fd.cFileName); } while(FindNextFile(hFindFile,&fd) != 0) { if (!(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { if (IsAvailabFormat(fd.cFileName)) { tmpFile.Add(fd.cFileName); } } else { tmpDir.Add(fd.cFileName); } } // 关闭句柄 FindClose(hFindFile); m_NumberDir = tmpDir.GetUpperBound() + 1; tmpDir.Append(tmpFile); m_FileNames.Append(tmpDir); } ShowFiles(0); } bool CMusicOpenFileDlg::IsAvailabFormat(CString strFileName) { strFileName.MakeLower(); int iStart = 1; int iEnd = 12; CString SupportFormat[13]; // 音乐文件 SupportFormat[1] = _T("mp3"); SupportFormat[2] = _T("wma"); SupportFormat[3] = _T("pcm"); SupportFormat[4] = _T("ima"); SupportFormat[5] = _T("mpa"); SupportFormat[6] = _T("mp2"); SupportFormat[7] = _T("wav"); SupportFormat[8] = _T("snd"); SupportFormat[9] = _T("au"); SupportFormat[10] = _T("aif"); SupportFormat[11] = _T("aiff"); SupportFormat[12] = _T("aifc"); CString FileExt; FileExt.Empty(); // 文件名长度 int strLen = strFileName.GetLength() - 1; for(int i = strLen; i >= 0; i--) { // 查找文件名中最好一个'.' if(strFileName.GetAt(i) == '.') { // 提取文件扩展名 FileExt = strFileName.Right(strLen - i); break; } } // 判断扩展名是否符合要求 if(!FileExt.IsEmpty()) { for(i = iStart; i <= iEnd; i++) { if(FileExt == SupportFormat[i]) { return true; } } return false; } else { return false; } } void CMusicOpenFileDlg::ShowFiles(int iStart) { m_lab1.ShowIcon(false); m_lab2.ShowIcon(false); m_lab3.ShowIcon(false); m_lab4.ShowIcon(false); m_lab5.ShowIcon(false); m_lab6.ShowIcon(false); int totalFile = m_FileNames.GetUpperBound() + 1; if (totalFile - m_NumberDir > 1) { m_butPlay.EnableWindow(TRUE); } else { m_butPlay.EnableWindow(FALSE); } if (iStart < totalFile) { if (totalFile - iStart >= 6) { if (iStart < m_NumberDir) { m_lab1.LoadIcon(IDB_ICON_MUSICDIR,IDB_ICON_MUSICDIRD,IDB_FILEVIEW_WND,RGB(0,0,0)); } else { m_lab1.LoadIcon(IDB_ICON_MUSIC,IDB_ICON_MUSICD,IDB_FILEVIEW_WND,RGB(0,0,0)); } m_lab1.SetButtonTitle(m_FileNames.GetAt(iStart)); iStart++; if (iStart < m_NumberDir) { m_lab2.LoadIcon(IDB_ICON_MUSICDIR,IDB_ICON_MUSICDIRD,IDB_FILEVIEW_WND,RGB(0,0,0)); } else { m_lab2.LoadIcon(IDB_ICON_MUSIC,IDB_ICON_MUSICD,IDB_FILEVIEW_WND,RGB(0,0,0)); } m_lab2.SetButtonTitle(m_FileNames.GetAt(iStart)); iStart++; if (iStart < m_NumberDir) { m_lab3.LoadIcon(IDB_ICON_MUSICDIR,IDB_ICON_MUSICDIRD,IDB_FILEVIEW_WND,RGB(0,0,0)); } else { m_lab3.LoadIcon(IDB_ICON_MUSIC,IDB_ICON_MUSICD,IDB_FILEVIEW_WND,RGB(0,0,0)); } m_lab3.SetButtonTitle(m_FileNames.GetAt(iStart)); iStart++; if (iStart < m_NumberDir) { m_lab4.LoadIcon(IDB_ICON_MUSICDIR,IDB_ICON_MUSICDIRD,IDB_FILEVIEW_WND,RGB(0,0,0)); } else { m_lab4.LoadIcon(IDB_ICON_MUSIC,IDB_ICON_MUSICD,IDB_FILEVIEW_WND,RGB(0,0,0)); } m_lab4.SetButtonTitle(m_FileNames.GetAt(iStart)); iStart++; if (iStart < m_NumberDir) { m_lab5.LoadIcon(IDB_ICON_MUSICDIR,IDB_ICON_MUSICDIRD,IDB_FILEVIEW_WND,RGB(0,0,0)); } else { m_lab5.LoadIcon(IDB_ICON_MUSIC,IDB_ICON_MUSICD,IDB_FILEVIEW_WND,RGB(0,0,0)); } m_lab5.SetButtonTitle(m_FileNames.GetAt(iStart)); iStart++; if (iStart < m_NumberDir) { m_lab6.LoadIcon(IDB_ICON_MUSICDIR,IDB_ICON_MUSICDIRD,IDB_FILEVIEW_WND,RGB(0,0,0)); } else { m_lab6.LoadIcon(IDB_ICON_MUSIC,IDB_ICON_MUSICD,IDB_FILEVIEW_WND,RGB(0,0,0)); } m_lab6.SetButtonTitle(m_FileNames.GetAt(iStart)); iStart++; m_CurrentPossion = iStart; m_lab1.ShowIcon(true); m_lab2.ShowIcon(true); m_lab3.ShowIcon(true); m_lab4.ShowIcon(true); m_lab5.ShowIcon(true); m_lab6.ShowIcon(true); m_butDown.EnableWindow(TRUE); if (m_CurrentPossion == totalFile) { m_butDown.EnableWindow(FALSE); } else { m_butDown.EnableWindow(TRUE); } } else { if (iStart < m_NumberDir) { m_lab1.LoadIcon(IDB_ICON_MUSICDIR,IDB_ICON_MUSICDIRD,IDB_FILEVIEW_WND,RGB(0,0,0)); } else { m_lab1.LoadIcon(IDB_ICON_MUSIC,IDB_ICON_MUSICD,IDB_FILEVIEW_WND,RGB(0,0,0)); } m_lab1.SetButtonTitle(m_FileNames.GetAt(iStart)); iStart++; m_lab1.ShowIcon(true); if (iStart < totalFile) { if (iStart < m_NumberDir) { m_lab2.LoadIcon(IDB_ICON_MUSICDIR,IDB_ICON_MUSICDIRD,IDB_FILEVIEW_WND,RGB(0,0,0)); } else { m_lab2.LoadIcon(IDB_ICON_MUSIC,IDB_ICON_MUSICD,IDB_FILEVIEW_WND,RGB(0,0,0)); } m_lab2.SetButtonTitle(m_FileNames.GetAt(iStart)); iStart++; m_lab2.ShowIcon(true); } if (iStart < totalFile) { if (iStart < m_NumberDir) { m_lab3.LoadIcon(IDB_ICON_MUSICDIR,IDB_ICON_MUSICDIRD,IDB_FILEVIEW_WND,RGB(0,0,0)); } else { m_lab3.LoadIcon(IDB_ICON_MUSIC,IDB_ICON_MUSICD,IDB_FILEVIEW_WND,RGB(0,0,0)); } m_lab3.SetButtonTitle(m_FileNames.GetAt(iStart)); iStart++; m_lab3.ShowIcon(true); } if (iStart < totalFile) { if (iStart < m_NumberDir) { m_lab4.LoadIcon(IDB_ICON_MUSICDIR,IDB_ICON_MUSICDIRD,IDB_FILEVIEW_WND,RGB(0,0,0)); } else { m_lab4.LoadIcon(IDB_ICON_MUSIC,IDB_ICON_MUSICD,IDB_FILEVIEW_WND,RGB(0,0,0)); } m_lab4.SetButtonTitle(m_FileNames.GetAt(iStart)); iStart++; m_lab4.ShowIcon(true); } if (iStart < totalFile) { if (iStart < m_NumberDir) { m_lab5.LoadIcon(IDB_ICON_MUSICDIR,IDB_ICON_MUSICDIRD,IDB_FILEVIEW_WND,RGB(0,0,0)); } else { m_lab5.LoadIcon(IDB_ICON_MUSIC,IDB_ICON_MUSICD,IDB_FILEVIEW_WND,RGB(0,0,0)); } m_lab5.SetButtonTitle(m_FileNames.GetAt(iStart)); iStart++; m_lab5.ShowIcon(true); } m_CurrentPossion = iStart; m_butDown.EnableWindow(FALSE); } if (m_CurrentPossion - 6 > 0) { m_butUp.EnableWindow(TRUE); } else { m_butUp.EnableWindow(FALSE); } } else { m_butUp.EnableWindow(FALSE); m_butDown.EnableWindow(FALSE); } m_lab1.Invalidate(); m_lab2.Invalidate(); m_lab3.Invalidate(); m_lab4.Invalidate(); m_lab5.Invalidate(); m_lab6.Invalidate(); } void CMusicOpenFileDlg::OnButton1() { // TODO: Add your control notification handler code here CString sSearchFile = m_FilePath + L"\\" + m_lab1.GetButtonTitle(); WIN32_FIND_DATA fd; // 查找文件信息 // 查找文件 HANDLE hFindFile = FindFirstFile(sSearchFile,&fd); if(hFindFile != INVALID_HANDLE_VALUE) { if (fd.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY) { m_FilePath = sSearchFile; m_lab1.SetChecked(false); ScanFile(); } } if (m_lab1.GetChecked()) { m_butPlay.EnableWindow(TRUE); } else { m_butPlay.EnableWindow(FALSE); } } void CMusicOpenFileDlg::OnButton2() { // TODO: Add your control notification handler code here CString sSearchFile = m_FilePath + L"\\" + m_lab2.GetButtonTitle(); WIN32_FIND_DATA fd; // 查找文件信息 // 查找文件 HANDLE hFindFile = FindFirstFile(sSearchFile,&fd); if(hFindFile != INVALID_HANDLE_VALUE) { if (fd.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY) { m_FilePath = sSearchFile; m_lab2.SetChecked(false); ScanFile(); } } if (m_lab2.GetChecked()) { m_butPlay.EnableWindow(TRUE); } else { m_butPlay.EnableWindow(FALSE); } } void CMusicOpenFileDlg::OnButton3() { // TODO: Add your control notification handler code here CString sSearchFile = m_FilePath + L"\\" + m_lab3.GetButtonTitle(); WIN32_FIND_DATA fd; // 查找文件信息 // 查找文件 HANDLE hFindFile = FindFirstFile(sSearchFile,&fd); if(hFindFile != INVALID_HANDLE_VALUE) { if (fd.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY) { m_FilePath = sSearchFile; m_lab3.SetChecked(false); ScanFile(); } } if (m_lab3.GetChecked()) { m_butPlay.EnableWindow(TRUE); } else { m_butPlay.EnableWindow(FALSE); } } void CMusicOpenFileDlg::OnButton4() { // TODO: Add your control notification handler code here CString sSearchFile = m_FilePath + L"\\" + m_lab4.GetButtonTitle(); WIN32_FIND_DATA fd; // 查找文件信息 // 查找文件 HANDLE hFindFile = FindFirstFile(sSearchFile,&fd); if(hFindFile != INVALID_HANDLE_VALUE) { if (fd.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY) { m_FilePath = sSearchFile; m_lab4.SetChecked(false); ScanFile(); } } if (m_lab4.GetChecked()) { m_butPlay.EnableWindow(TRUE); } else { m_butPlay.EnableWindow(FALSE); } } void CMusicOpenFileDlg::OnButton5() { // TODO: Add your control notification handler code here CString sSearchFile = m_FilePath + L"\\" + m_lab5.GetButtonTitle(); WIN32_FIND_DATA fd; // 查找文件信息 // 查找文件 HANDLE hFindFile = FindFirstFile(sSearchFile,&fd); if(hFindFile != INVALID_HANDLE_VALUE) { if (fd.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY) { m_FilePath = sSearchFile; m_lab5.SetChecked(false); ScanFile(); } } if (m_lab5.GetChecked()) { m_butPlay.EnableWindow(TRUE); } else { m_butPlay.EnableWindow(FALSE); } } void CMusicOpenFileDlg::OnButton6() { // TODO: Add your control notification handler code here CString sSearchFile = m_FilePath + L"\\" + m_lab6.GetButtonTitle(); WIN32_FIND_DATA fd; // 查找文件信息 // 查找文件 HANDLE hFindFile = FindFirstFile(sSearchFile,&fd); if(hFindFile != INVALID_HANDLE_VALUE) { if (fd.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY) { m_FilePath = sSearchFile; m_lab6.SetChecked(false); ScanFile(); } } if (m_lab6.GetChecked()) { m_butPlay.EnableWindow(TRUE); } else { m_butPlay.EnableWindow(FALSE); } } CString CMusicOpenFileDlg::GetFilePath() { g_Playlist.m_FileList.RemoveAll(); g_Playlist.m_TotalFiles = m_FileNames.GetUpperBound() + 1; g_Playlist.m_CurrentFile = 0; g_Playlist.m_FileList.Append(m_FileNames); g_Playlist.m_FilePath = m_FilePath + L"\\"; g_Playlist.InitSeed(g_Playlist.m_TotalFiles); if (m_File.IsEmpty()) { return L""; } else { return m_File; } } void CMusicOpenFileDlg::SetWndTitle(CString sTitle) { m_TitleTxt = sTitle; }