📄 myplayerdlg.cpp
字号:
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 + -