📄 playdlg.cpp
字号:
if(isActiveTz==TRUE)
{//停止
isActiveTz=FALSE;
InvalidateRect(CRect(0,0,320,240),FALSE);
if(isPlay==TRUE)
{//播放状态
isPlay=FALSE;
m_pMediaControl->Stop();
m_pMediaControl->Release();
m_pMediaControl=NULL;
// 释放对象
m_pGraph-> Release();
// 程序结束时调用
m_pMediaSeeking->Release();
g_pMediaPosition->Release();
CoUninitialize();
KillTimer(1);
}
else if(pauseStatus==TRUE)
{//停止状态
pauseStatus=FALSE;
m_pMediaControl->Stop();
m_pMediaControl->Release();
m_pMediaControl=NULL;
// 释放对象
m_pGraph-> Release();
// 程序结束时调用
m_pMediaSeeking->Release();
g_pMediaPosition->Release();
CoUninitialize();
KillTimer(1);
}
curTime=0;
totalTime=0;
}
if(isActiveKt==TRUE)
{//前一首
isActiveKt=FALSE;
InvalidateRect(CRect(0,0,320,240),FALSE);
/*
m_pMediaSeeking->SetTimeFormat(&TIME_FORMAT_MEDIA_TIME); // frameformat => timeformat
m_pMediaSeeking->GetDuration(&totalTime); // get total frames count
m_pMediaSeeking->GetCurrentPosition(&curTime);
curTime =curTime-totalTime/10 ;//快进1/10
if(curTime<0)
curTime=0;
m_pMediaSeeking->SetPositions(&curTime, AM_SEEKING_AbsolutePositioning,NULL, AM_SEEKING_NoPositioning);
m_pMediaControl->Run();
*/
if(m_pMediaControl!=NULL)
{
if(m_pMediaControl!=NULL && isPlay==TRUE)
{//播放过没有停止的
KillTimer(1);
if(Wavpath!="")
{
m_pMediaControl->Stop();
Wavpath="";
}
m_pMediaControl->Release();
m_pMediaControl=NULL;
// 释放对象
m_pGraph-> Release();
// 程序结束时调用
m_pMediaSeeking->Release();
g_pMediaPosition->Release();
CoUninitialize();
}
CoInitialize(NULL);
CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC,IID_IGraphBuilder,(void **)&m_pGraph);
m_pGraph->QueryInterface(IID_IMediaSeeking, (void **)&m_pMediaSeeking);
if(cursel==0)
cursel=songNum-1;//第一首到最后一首
else
cursel--;//后一首歌
m_musicList.SetCurSel(cursel);
m_musicList.GetText(cursel,Wavpath);
Wavpath=directory+Wavpath+".mp3";
m_pGraph->QueryInterface(IID_IMediaControl, (void **)&m_pMediaControl);
m_pGraph-> RenderFile(Wavpath,NULL);
m_pGraph->QueryInterface(IID_IMediaPosition,(LPVOID*)&g_pMediaPosition);
g_pMediaPosition->get_Duration(&g_Len);
g_pMediaPosition->put_CurrentPosition(0);
m_pMediaControl->Run();
m_pMediaSeeking->SetTimeFormat(&TIME_FORMAT_MEDIA_TIME); // frameformat => timeformat
m_pMediaSeeking->GetDuration(&totalTime); //得到的时间单位为100ns
m_pMediaSeeking->GetCurrentPosition(&curTime);
SetTimer(1,1000,NULL);
isActiveBf=FALSE;
isPlay=TRUE;
}
}
if(isActiveKj==TRUE)
{//后一首
isActiveKj=FALSE;
InvalidateRect(CRect(0,0,320,240),FALSE);
/* m_pMediaSeeking->SetTimeFormat(&TIME_FORMAT_MEDIA_TIME); // frameformat => timeformat
m_pMediaSeeking->GetDuration(&totalTime); // get total frames count
m_pMediaSeeking->GetCurrentPosition(&curTime);
curTime =curTime + totalTime/10 ;//快进1/10
m_pMediaSeeking->SetPositions(&curTime, AM_SEEKING_AbsolutePositioning,NULL , AM_SEEKING_NoPositioning);
m_pMediaControl->Run();
*/
if(m_pMediaControl!=NULL)
{//如果是播放过的
if(m_pMediaControl!=NULL && isPlay==TRUE)
{//播放过没有停止的
// KillTimer(1);
if(Wavpath!="")
{
m_pMediaControl->Stop();
Wavpath="";
}
m_pMediaControl->Release();
m_pMediaControl=NULL;
// 释放对象
m_pGraph-> Release();
// 程序结束时调用
m_pMediaSeeking->Release();
g_pMediaPosition->Release();
CoUninitialize();
}
CoInitialize(NULL);
CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC,IID_IGraphBuilder,(void **)&m_pGraph);
m_pGraph->QueryInterface(IID_IMediaSeeking, (void **)&m_pMediaSeeking);
if(cursel==songNum-1)
cursel=0;//最后一首返回到第一首
else
cursel++;//后一首歌
m_musicList.SetCurSel(cursel);
m_musicList.GetText(cursel,Wavpath);
Wavpath=directory+Wavpath+".mp3";
m_pGraph->QueryInterface(IID_IMediaControl, (void **)&m_pMediaControl);
m_pGraph-> RenderFile(Wavpath,NULL);
m_pGraph->QueryInterface(IID_IMediaPosition,(LPVOID*)&g_pMediaPosition);
g_pMediaPosition->get_Duration(&g_Len);
g_pMediaPosition->put_CurrentPosition(0);
m_pMediaControl->Run();
m_pMediaSeeking->SetTimeFormat(&TIME_FORMAT_MEDIA_TIME); // frameformat => timeformat
m_pMediaSeeking->GetDuration(&totalTime); //得到的时间单位为100ns
m_pMediaSeeking->GetCurrentPosition(&curTime);
SetTimer(1,1000,NULL);
isActiveBf=FALSE;
isPlay=TRUE;
}
}
if(isActiveRe==TRUE)
{//返回
isActiveRe=FALSE;
InvalidateRect(CRect(258,183,258+65,183+65),FALSE);
CDialog::OnCancel();
waveOutSetVolume(0,volumeValue_bk); //恢复原始音量设置
KillTimer(1);
if(isPlay==TRUE || pauseStatus==TRUE)
{//如果正在播放,或者是暂停状态
m_pMediaControl->Stop();
Wavpath="";
}
if(m_pMediaControl!=NULL)
{//如果已经播放过的
m_pMediaControl->Release();
// 释放对象
m_pGraph-> Release();
// 程序结束时调用
m_pMediaSeeking->Release();
g_pMediaPosition->Release();
CoUninitialize();
}
}
if(isActiveVol==TRUE)
{//音量
isActiveVol=FALSE;
//waveOutSetVolume(0,0);
//waveOutGetVolume(0,)
//value=(point.x-172)/75.0*100;
//volumeValue=(DWORD)(value*0x28F5C28);
//::MessageBox(NULL, _T("Play MP3 "), _T("Play MP3 "),MB_OK);
//InvalidateRect(CRect(172-5,210-5,172+75+5,210+5+5),FALSE);
InvalidateRect(CRect(187,203,246,250),FALSE);
}
CDialog::OnLButtonUp(nFlags, point);
}
BOOL CPlayDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CString str;
CPaintDC dc(this); // device context for painting
CBitmap bitmap;
CDC memDC;
CFont font;
CRect rect;
rect.left=172-5;
rect.top=213-5;
rect.right=172+5;
rect.bottom=213+5;
CBrush brush1(RGB(250,174,106)); //Choice adapted one color
dc.SelectObject(&brush1);
dc.Ellipse(&rect);
directory="\\Storage Card\\MP3\\";
// directory="";
//搜索mp3格式的文件
file=FindFirstFile(_T("\\Storage Card\\MP3\\*.mp3"),&lpFileData);
if(file!=INVALID_HANDLE_VALUE)
{
wavlist=lpFileData.cFileName;
// Wavpath=directory+wavlist;
int dot=wavlist.Find('.');
wavlist=wavlist.Left(dot);
m_musicList.AddString(wavlist);
songNum++;
}
BOOL FileEnd=FindNextFile(file,&lpFileData);
while(FileEnd!=0)
{
wavlist=lpFileData.cFileName;
int dot=wavlist.Find('.');
wavlist=wavlist.Left(dot);
m_musicList.AddString(wavlist);
songNum++;
FileEnd=FindNextFile(file,&lpFileData);
}
/*
m_musicList.AddString(_T("aaaa"));
m_musicList.AddString(_T("bbbb"));
m_musicList.AddString(_T("cccc"));
m_musicList.AddString(_T("dddd"));
m_musicList.AddString(_T("eeee"));
m_musicList.AddString(_T("ffff"));
m_musicList.AddString(_T("gggg"));
m_musicList.AddString(_T("hhhh"));
m_musicList.AddString(_T("jjjj"));
m_musicList.AddString(_T("kkkk"));
m_musicList.AddString(_T("llll"));
m_musicList.AddString(_T("mmmm"));
*/
//播放相关start
//播放相关end
return TRUE;
}
HBRUSH CPlayDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(pWnd->GetDlgCtrlID()==IDC_LIST1)
{
// pDC->SetBkColor(RGB(156,178,205));
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(14,66,121));
// hbr = CreateSolidBrush(RGB(156,178,205));
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
BOOL CPlayDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
// return CDialog::OnEraseBkgnd(pDC);
return -1;
}
int CPlayDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;
return 0;
}
void CPlayDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
double pos;
g_pMediaPosition->get_CurrentPosition(&pos);
if(pos>=g_Len)
{
m_pMediaControl->Stop();
m_pMediaControl->Release();
m_pMediaControl=NULL;
// 释放对象
m_pGraph-> Release();
// 程序结束时调用
m_pMediaSeeking->Release();
g_pMediaPosition->Release();
CoUninitialize();
CoInitialize(NULL);
CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC,IID_IGraphBuilder,(void **)&m_pGraph);
m_pGraph->QueryInterface(IID_IMediaSeeking, (void **)&m_pMediaSeeking);
if(cursel==songNum-1)
cursel=0;//最后一首返回到第一首
else
cursel++;//后一首歌
m_musicList.SetCurSel(cursel);
m_musicList.GetText(cursel,Wavpath);
Wavpath=directory+Wavpath+".mp3";
m_pGraph->QueryInterface(IID_IMediaControl, (void **)&m_pMediaControl);
m_pGraph-> RenderFile(Wavpath,NULL);
m_pGraph->QueryInterface(IID_IMediaPosition,(LPVOID*)&g_pMediaPosition);
g_pMediaPosition->get_Duration(&g_Len);
g_pMediaPosition->put_CurrentPosition(0);
m_pMediaControl->Run();
m_pMediaSeeking->SetTimeFormat(&TIME_FORMAT_MEDIA_TIME); // frameformat => timeformat
m_pMediaSeeking->GetDuration(&totalTime); //得到的时间单位为100ns
m_pMediaSeeking->GetCurrentPosition(&curTime);
}
m_pMediaSeeking->SetTimeFormat(&TIME_FORMAT_MEDIA_TIME); // frameformat => timeformat
m_pMediaSeeking->GetDuration(&totalTime); //得到的时间单位为100ns
m_pMediaSeeking->GetCurrentPosition(&curTime);
InvalidateRect(CRect(20,155,300,178),FALSE);
CDialog::OnTimer(nIDEvent);
}
void CPlayDlg::OnDblclkList()
{
cursel=m_musicList.GetCurSel();
if(cursel < 0)
return;
if(m_pMediaControl!=NULL && isPlay==TRUE)
{//播放过没有停止的
// KillTimer(1);
if(Wavpath!="")
{
m_pMediaControl->Stop();
Wavpath="";
}
m_pMediaControl->Release();
m_pMediaControl=NULL;
// 释放对象
m_pGraph-> Release();
// 程序结束时调用
m_pMediaSeeking->Release();
g_pMediaPosition->Release();
CoUninitialize();
}
CoInitialize(NULL);
CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC,IID_IGraphBuilder,(void **)&m_pGraph);
m_pGraph->QueryInterface(IID_IMediaSeeking, (void **)&m_pMediaSeeking);
m_musicList.GetText(cursel,Wavpath);
Wavpath=directory+Wavpath+".mp3";
m_pGraph->QueryInterface(IID_IMediaControl, (void **)&m_pMediaControl);
m_pGraph-> RenderFile(Wavpath,NULL);
m_pGraph->QueryInterface(IID_IMediaPosition,(LPVOID*)&g_pMediaPosition);
g_pMediaPosition->get_Duration(&g_Len);
g_pMediaPosition->put_CurrentPosition(0);
m_pMediaControl->Run();
m_pMediaSeeking->SetTimeFormat(&TIME_FORMAT_MEDIA_TIME); // frameformat => timeformat
m_pMediaSeeking->GetDuration(&totalTime); //得到的时间单位为100ns
m_pMediaSeeking->GetCurrentPosition(&curTime);
SetTimer(1,1000,NULL);
isActiveBf=FALSE;
isPlay=TRUE;
// SetTimer(1,1000,NULL);
InvalidateRect(CRect(0,0,320,240),FALSE);
}
void CPlayDlg::OnSelchangeList1()
{
cursel=m_musicList.GetCurSel();
if(cursel < 0)
return;
m_musicList.GetText(cursel,Wavpath);
Wavpath=directory+Wavpath+".mp3";
// InvalidateRect(CRect(0,0,320,240),FALSE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -