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

📄 myplayerdlg.cpp

📁 一种类似千千静听的音乐播放器
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	rect.bottom=80;
	m_stcPlay.MoveWindow(&rect,TRUE);

	rect.left=90;
	rect.right=115;
	m_stcMode.MoveWindow(&rect,TRUE);

}

void CMyPlayerDlg::OnStaticMode() 
{
	// TODO: Add your control notification handler code here
	static int nCounter=0;
	nCounter++;
	if(nCounter==3)
		nCounter=0;
	switch(nCounter){
	case 0:
		m_stcMode.SetWindowText("随机");
		m_nPlayMode=MODE_RAND;
		theApp.RandOrder();
		break;
	case 1:
		m_stcMode.SetWindowText("顺序");
		m_nPlayMode=MODE_SEQ;
		m_nNowPlaying=m_nPlayOrder[m_nNowPlaying];
		theApp.SequenceOrder();		
		break;
	case 2:
		m_stcMode.SetWindowText("单曲");
		m_nPlayMode=MODE_SINGLE;
		break;		
	}
	


}

void CMyPlayerDlg::OnStaticPlay() 
{
	// TODO: Add your control notification handler code here
	if(hAudio==NULL)
		return;	
	fPlay=!fPlay;
	if(fPlay){
		m_stcPlay.SetWindowText("播放");
		MCIWndResume(hAudio);
	}
	else{
		m_stcPlay.SetWindowText("暂停");
		MCIWndPause(hAudio);
	}
}

void CMyPlayerDlg::MoveSlide()
{ 
  if(hAudio!=NULL)
   m_slide.SetSlidePos(MCIWndGetPosition(hAudio)); 
}

void CMyPlayerDlg::OnBtnVolume() 
{
	// TODO: Add your control notification handler code here
	m_nVolume=m_volume.GetPos();
	 int nSetVol=63*m_nVolume;
	 if(nSetVol>1000)
		   nSetVol=1000;
	 if(hAudio!=NULL);
	  MCIWndSetVolume(hAudio,nSetVol);
}

void CMyPlayerDlg::OnBtnSlide() 
{
	// TODO: Add your control notification handler code here
	if(hAudio==NULL)
		return;
	int n=m_slide.GetSlidePos();
	if(n>MCIWndGetLength(hAudio))
		n=MCIWndGetLength(hAudio);
   m_slide.SetSlidePos(n);
   MCIWndSeek(hAudio,m_slide.GetSlidePos());
   MCIWndPlay(hAudio);
   m_pLyricDlg->SlideClick();
   OnTimer(1);
}

void CMyPlayerDlg::ExitPlayer()
{
   WriteConfig();
   if(nCurrentList<0)
	   nCurrentList=0;
   m_pPlayListDlg->SaveList(nCurrentList);
   KillTimer(1);
   DeleteNotifyIcon();
   PostQuitMessage(0);
}

void CMyPlayerDlg::OnCancel() 
{
	// TODO: Add extra cleanup here
	return;
	CDialog::OnCancel();
}
void CMyPlayerDlg::OnOK() 
{
	// TODO: Add extra validation here
//	return;
	CDialog::OnOK();
}

void CMyPlayerDlg::InitSize()
{
  CRect rect;
  rect.top=100;
  rect.left=100;
  rect.right=rect.left+283;
  rect.bottom=rect.top+122;
  MoveWindow(&rect,TRUE);
}
void CMyPlayerDlg::InitFileList()
{
	ifstream infile("listname.dat",ios::in);
	if(!infile)
		return;
    TCHAR  szTemp[512];
    int nIndex=0;
	while(infile.getline(szTemp,512)){
		if(lstrlen(szTemp)>0){
			if(GetFileList(szTemp,nIndex))
				nIndex++;
			if(nIndex>=10)
				break;
		}
	}
	infile.close();
    if(nIndex>0)
		return;
	CString strFileName;
	strFileName.Format("%s\\000.lst",strCurrentDir);
	ofstream outfile("listname.dat",ios::out),out(strFileName,ios::out);
	 outfile<<"默认*-*-*-*000.lst"<<endl;
	outfile.close();
	fileList[0].strMenu="默认";
	fileList[0].strFileName="000.lst";
}
BOOL CMyPlayerDlg::GetFileList(CString strLine,int nIndex)
{
   int nPos;
   nPos=strLine.Find("*-*-*-*",0);
   if(nPos<0)
	   return FALSE;
   fileList[nIndex].strMenu=strLine.Left(nPos);
   fileList[nIndex].strFileName=strLine.Right(strLine.GetLength()-nPos-7);
   return TRUE;
}


void CMyPlayerDlg::OnBtnPlaylistShow() 
{
	// TODO: Add your control notification handler code here
	 if(m_pPlayListDlg!=NULL)
		if(m_pPlayListDlg->IsWindowVisible()){
			m_pPlayListDlg->ShowWindow(SW_HIDE);
		    m_btnPLShow.SetBitmap(IDB_PLAYLIST_SHOW_NORMAL,IDB_PLAYLIST_SHOW_OVER);
          	m_btnPLShow.SetToolTipText("显示播放列表");
		}else{
			m_pPlayListDlg->ShowWindow(SW_SHOW);
			m_btnPLShow.SetBitmap(IDB_PLAYLIST_HIDE_NORMAL,IDB_PLAYLIST_HIDE_OVER);
			m_btnPLShow.SetToolTipText("关闭播放列表");
		}
}

void CMyPlayerDlg::CreatePlayList()
{
  	m_pPlayListDlg =new CPlayListDlg(this);
	m_pPlayListDlg->Create();

    if(m_pPlayListDlg==NULL)
		return;
	
	m_pPlayListDlg->ShowWindow(SW_SHOW);
	MovePlayListWindow();
	
}

void CMyPlayerDlg::CreateLyric()
{
	m_pLyricDlg =new CLyricDlg(this);
	m_pLyricDlg->Create();
	m_pLyricDlg->ShowWindow(SW_SHOW);
	MoveLyricWindow();

}

void CMyPlayerDlg::OnMove(int x, int y) 
{
	CDialog::OnMove(x, y);
	
	// TODO: Add your message handler code here

	if(fInited){	
	  if(IsPlayListAttach())
         MovePlayListWindow();
	  if(IsLyricDlgAttach())
	     MoveLyricWindow();
	}
    

}

void CMyPlayerDlg::MovePlayListWindow()
{
   	CRect rectParent;
	CRect rect;
	
	GetWindowRect(&rectParent);
	rect.top=rectParent.top+rectParent.Height();
	rect.left=rectParent.left;
	rect.bottom=rect.top+252;
	rect.right=rect.left+283;
	m_pPlayListDlg->MoveWindow(&rect,TRUE);
}

void CMyPlayerDlg::MoveLyricWindow()
{
	CRect rectParent;
	CRect rect;
	
	GetWindowRect(&rectParent);
	rect.top=rectParent.top;
	rect.left=rectParent.left+283;
	rect.bottom=rect.top+374;
	rect.right=rect.left+283;
	m_pLyricDlg->MoveWindow(&rect,TRUE);

}

BOOL CMyPlayerDlg::IsPlayListAttach()
{
	CRect rectParent;
	CRect rect;
	GetWindowRect(&rectParent);
    m_pPlayListDlg->GetWindowRect(&rect);
	if(rect.top>=rectParent.bottom-10&&rect.top<=rectParent.bottom+10)
		return TRUE;

	return FALSE;
}

BOOL CMyPlayerDlg::IsLyricDlgAttach()
{
	CRect rectParent;
	CRect rect;
	GetWindowRect(&rectParent);
    m_pLyricDlg->GetWindowRect(&rect);
	if(rect.left>=rectParent.right-10&&rect.left<=rectParent.right+10)
		return TRUE;
	return FALSE;
}

void CMyPlayerDlg::OnBtnLyric() 
{
	// TODO: Add your control notification handler code here
	if(m_pLyricDlg!=NULL){
		if(m_pLyricDlg->IsWindowVisible()){
			m_pLyricDlg->ShowWindow(SW_HIDE);
		    m_btnLyric.SetBitmap(IDB_LYRIC_SHOW_NORMAL,IDB_LYRIC_SHOW_OVER);
			m_btnLyric.SetToolTipText("打开歌词");
		}else{
			m_pLyricDlg->ShowWindow(SW_SHOW);
		    m_btnLyric.SetBitmap(IDB_LYRIC_HIDE_NORMAL,IDB_LYRIC_HIDE_OVER);
			m_btnLyric.SetToolTipText("关闭歌词");
		}
	}
}

void CMyPlayerDlg::OnBtnOpen() 
{
	// TODO: Add your control notification handler code here
	CString strFilter="所有支持文件(*.mp3,*.wav,*.wma)|*.mp3;*.wav;*.wma||";
	CFileDialog fdlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,strFilter);
	if(fdlg.DoModal()==IDOK){
       CString strFileName=fdlg.GetPathName();	   	   
	  
	   m_strPlayListArray.RemoveAll();
	   m_strPlayListArray.Add(strFileName);
	   CString strList,strFile;
	   strFile=GetFileTitle(strFileName);
	   strList.Format("01  %s",strFile);
	   m_pPlayListDlg->m_playlist.ResetContent();
	   m_pPlayListDlg->m_playlist.AddString(strList);

	   Play(0);
	}
}

CString CMyPlayerDlg::GetFileTitle(CString strFileName)
{
	CString str;

	int nPos=-1;
	int nOldPos=-1;
	while((nPos=strFileName.Find("\\",nPos+1))>0)
		nOldPos=nPos;
   str=strFileName.Right(strFileName.GetLength()-nOldPos-1);
   strFileName=str.Left(str.GetLength()-4);  
	
   return strFileName;
}

void CMyPlayerDlg::Play(int nIndex)
{
	if(nIndex>=m_strPlayListArray.GetSize())
		return;
	CString strFileName=m_strPlayListArray.GetAt(nIndex);
    if(!IsFileExist(strFileName)){
		m_pPlayListDlg->m_playlist.DeleteString(nIndex);
		m_strPlayListArray.RemoveAt(nIndex,1);
		return;
	}
	if(hAudio!=NULL){
		   MCIWndDestroy(hAudio);
		   hAudio=NULL;
	   }
	   try{
	   hAudio=MCIWndCreate(GetSafeHwnd(),AfxGetInstanceHandle(),
		           WS_CHILD|MCIWNDF_NOMENU,strFileName);
	   }catch(...)
	   {
		   if(nIndex>=0){
		  m_pPlayListDlg->m_playlist.DeleteString(nIndex);
		 m_strPlayListArray.RemoveAt(nIndex,1);
		   }
		   return;
	   }
	   if(hAudio!=NULL){
		   MCIWndPlay(hAudio);	
		   if(!m_strLyricPath.IsEmpty()){
				if(!m_pLyricDlg->OpenLyric(m_strLyricPath,nIndex))
					m_pLyricDlg->OpenLyric(nIndex);
		   }else
			   m_pLyricDlg->OpenLyric(nIndex);
		   
    	   
           strTitle=GetFileTitle(strFileName);		  
		   FormatTitle(strTitle);
		   nRollTextCounter=0;
		   m_nTime=0;
		   fPlaying=TRUE;
		   m_slide.SetRange(0,MCIWndGetLength(hAudio));
		   m_slide.SetSlidePos(0);
		   m_pPlayListDlg->m_playlist.SetCurSel(nIndex);

		   int nSetVol=63*m_nVolume;
		   if(nSetVol>1000)
			   nSetVol=1000;
		   MCIWndSetVolume(hAudio,nSetVol);
	   }
}

void CMyPlayerDlg::FormatTitle(CString strFile)
{
	CString strTemp="                ";
	strFile=strTemp+strFile;
	strFile=strFile+strTemp;
	strTitle=strFile;
}

void CMyPlayerDlg::GetDropFiles(HDROP hDrop)
{
	CPoint point;
	CRect rect;
	GetClientRect(&rect);
	DragQueryPoint(hDrop,&point);

	if(point.x<=rect.Width()&&point.y<=rect.Height()){
		DropFilesInMain(hDrop);
		return;
	}
	
	DropFilesInPlayList(hDrop);
	
}

BOOL CMyPlayerDlg::IsSupportFile(CString strFileName)
{
	CString strType=strFileName.Right(4);
	strType.MakeUpper();
	if(strType==".MP3"||
		strType==".WAV"||
		strType==".WMA")
		return TRUE;
	
	return FALSE;
}

LRESULT CMyPlayerDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
	// TODO: Add your specialized code here and/or call the base class
	switch(message){
	case WM_DROPFILES:
		{
		 HDROP hDropInfo;
	     hDropInfo=(HDROP)wParam;
	     GetDropFiles(hDropInfo);
	     DragFinish(hDropInfo);
		 break;		
		}
	case WM_PLAY:
		{
			int n=(int)wParam;			
		    Play(n);
			if(m_nPlayMode==MODE_RAND){
				for(int i=0;i<m_strPlayListArray.GetSize();i++)	{
					if(m_nPlayOrder[i]==n){
						m_nNowPlaying=i;
						break;
					}
				}
			}else{
				m_nNowPlaying=n;
			}
			
		}
	}
	
	return CDialog::WindowProc(message, wParam, lParam);
}

void CMyPlayerDlg::DropFilesInMain(HDROP hDrop)
{
	m_strPlayListArray.RemoveAll();
	m_pPlayListDlg->m_playlist.ResetContent();
	UINT nFiles;
	TCHAR szFileName[MAX_PATH];
	CString strFormat;
	CString strShortName;
	nFiles=DragQueryFile(hDrop,(UINT)0xffffffff,NULL,NULL);
	for(UINT i=0;i<nFiles;i++){		
		DragQueryFile(hDrop,i,szFileName,MAX_PATH);
		if(IsSupportFile(szFileName)){
			m_strPlayListArray.Add(szFileName);
			strShortName=GetFileTitle(szFileName);
			int n=m_pPlayListDlg->m_playlist.GetCount();
			if(n+1<10)
				strFormat.Format("0%d  %s",n+1,strShortName);
			else
				strFormat.Format("%d  %s",n+1,strShortName);
			m_pPlayListDlg->m_playlist.AddString(strFormat);
		}
	}

	

	if(m_strPlayListArray.GetSize()>0){
		if(m_nPlayMode==MODE_RAND)
		   theApp.RandOrder();
		else
			theApp.SequenceOrder();

		m_nNowPlaying=0;
		Play(m_nPlayOrder[0]);
	}

}

void CMyPlayerDlg::DropFilesInPlayList(HDROP hDrop)
{
	UINT nFiles;
	TCHAR szFileName[MAX_PATH];
	CString strFormat;
	CString strShortName;
	nFiles=DragQueryFile(hDrop,(UINT)0xffffffff,NULL,NULL);
	for(UINT i=0;i<nFiles;i++){		
		DragQueryFile(hDrop,i,szFileName,MAX_PATH);
		if(IsSupportFile(szFileName)){
			m_strPlayListArray.Add(szFileName);
			strShortName=GetFileTitle(szFileName);
			int n=m_pPlayListDlg->m_playlist.GetCount();
			if(n+1<10)
				strFormat.Format("0%d  %s",n+1,strShortName);
			else
				strFormat.Format("%d  %s",n+1,strShortName);
			m_pPlayListDlg->m_playlist.AddString(strFormat);
		}
	}

	if(m_nPlayMode==MODE_RAND)
		  theApp.RandOrder();
	else
		  theApp.SequenceOrder();
   
}

void CMyPlayerDlg::OnBtnNext() 
{
	// TODO: Add your control notification handler code here
	if(m_strPlayListArray.GetSize()==0)
		return;

	m_nNowPlaying++;
	if(m_nNowPlaying>=m_strPlayListArray.GetSize())
		m_nNowPlaying=0;
	Play(m_nPlayOrder[m_nNowPlaying]);
}

void CMyPlayerDlg::OnBtnPlay() 
{
	// TODO: Add your control notification handler code here
	int n=m_pPlayListDlg->m_playlist.GetCurSel();
	if(n<0){

⌨️ 快捷键说明

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