www.pudn.com > gpsCE080506.rar > PlayDlg.cpp


// PlayDlg.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "gps.h" 
#include "PlayDlg.h" 
 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CPlayDlg dialog 
	#pragma   comment   (lib, "Ole32.lib ")  
	#pragma   comment   (lib, "Strmiids.lib ")  
 
 
//--------------------音量控制------------------------------- 
DWORD volumeValue_bk;   //恢复原始音量 
CPlayDlg::CPlayDlg(CWnd* pParent /*=NULL*/) 
	: CDialog(CPlayDlg::IDD, pParent) 
{ 
	//{{AFX_DATA_INIT(CPlayDlg) 
		// NOTE: the ClassWizard will add member initialization here 
	//}}AFX_DATA_INIT 
	isPlay=FALSE; 
    isActiveVol=FALSE; 
	isActiveBf=FALSE; 
	isActiveTz=FALSE; 
	isActiveKt=FALSE; 
	isActiveKj=FALSE; 
	isActiveRe=FALSE; 
 
	pauseStatus=FALSE; 
 
	Wavpath=""; 
	songNum=0; 
	m_pMediaControl=NULL; 
 
//	time=0; 
	curTime=totalTime=0; 
	waveOutGetVolume(0,&volumeValue); 
	volumeValue_bk=volumeValue; 
} 
 
 
void CPlayDlg::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CPlayDlg) 
	DDX_Control(pDX, IDC_LIST1, m_musicList); 
 
//	DDX_Control(pDX, IDC_MEDIAPLAYER2, m_thePlayer); 
	//}}AFX_DATA_MAP 
} 
 
 
BEGIN_MESSAGE_MAP(CPlayDlg, CDialog) 
	//{{AFX_MSG_MAP(CPlayDlg) 
	ON_WM_PAINT() 
	ON_WM_LBUTTONDOWN() 
	ON_WM_LBUTTONUP() 
	ON_WM_CTLCOLOR() 
	ON_WM_ERASEBKGND() 
	ON_WM_CREATE() 
	ON_WM_TIMER() 
	ON_LBN_DBLCLK(IDC_LIST1, OnDblclkList) 
	ON_LBN_SELCHANGE(IDC_LIST1, OnSelchangeList1) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CPlayDlg message handlers 
 
void CPlayDlg::OnPaint()  
{ 
	CPaintDC dc(this); // device context for painting 
 
	int cur; 
	int delValue; 
 
	CBitmap	bitmap; 
    BITMAP  bmp; 
	CDC     memDC; 
    CFont font; 
    CRect rect; 
// -----------------背景-------------------------------------- 
	bitmap.LoadBitmap(IDB_BITMAP1);//IDB_NAV 
	bitmap.GetObject (sizeof(BITMAP),&bmp); 
	memDC.CreateCompatibleDC (&dc); 
	memDC.SelectObject (bitmap); 
	dc.BitBlt (0,0,bmp.bmWidth ,bmp.bmHeight ,&memDC,0,0,SRCCOPY); 
	bitmap.DeleteObject(); 
//-------------------------------------------------------------- 
	CString str=TEXT("播放器");//TEXT("音频"); 
 
	font.CreatePointFont(180,L"黑体"); 
	dc.SelectObject(&font); 
	dc.SetBkMode(TRANSPARENT); 
	dc.SetTextColor(RGB(255,255,255)); 
	dc.DrawText(str, CRect(128,8,200,40), 0); 
 
	bitmap.LoadBitmap(IDB_YLYT); 
	bitmap.GetObject (sizeof(BITMAP),&bmp); 
	memDC.CreateCompatibleDC (&dc); 
	memDC.SelectObject (bitmap); 
	dc.BitBlt (172,205,bmp.bmWidth ,bmp.bmHeight ,&memDC,0,0,SRCCOPY); 
	bitmap.DeleteObject(); 
 
 
	bitmap.LoadBitmap(IDB_BFJD); 
	bitmap.GetObject (sizeof(BITMAP),&bmp); 
	memDC.CreateCompatibleDC (&dc); 
	memDC.SelectObject (bitmap); 
	dc.BitBlt (110,165,bmp.bmWidth ,bmp.bmHeight ,&memDC,0,0,SRCCOPY); 
	bitmap.DeleteObject(); 
 
	 
 
 
	if(isActiveBf==FALSE) 
	{ 
		if(isPlay==TRUE) 
		{//如果是正在播放,显示停止 
			bitmap.LoadBitmap(IDB_ZANTING1); 
			bitmap.GetObject (sizeof(BITMAP),&bmp); 
			memDC.CreateCompatibleDC (&dc); 
			memDC.SelectObject (bitmap); 
			dc.BitBlt (19,200,bmp.bmWidth ,bmp.bmHeight ,&memDC,0,0,SRCCOPY); 
			bitmap.DeleteObject(); 
		} 
		else 
		{ 
			bitmap.LoadBitmap(IDB_BOFANG1); 
			bitmap.GetObject (sizeof(BITMAP),&bmp); 
			memDC.CreateCompatibleDC (&dc); 
			memDC.SelectObject (bitmap); 
			dc.BitBlt (19,200,bmp.bmWidth ,bmp.bmHeight ,&memDC,0,0,SRCCOPY); 
			bitmap.DeleteObject(); 
		} 
	} 
	else 
	{ 
		if(isPlay==TRUE) 
		{//如果是正在播放,显示停止 
			bitmap.LoadBitmap(IDB_ZANTING2); 
			bitmap.GetObject (sizeof(BITMAP),&bmp); 
			memDC.CreateCompatibleDC (&dc); 
			memDC.SelectObject (bitmap); 
			dc.BitBlt (19,200,bmp.bmWidth ,bmp.bmHeight ,&memDC,0,0,SRCCOPY); 
			bitmap.DeleteObject(); 
		} 
		else 
		{//停止播放 
			bitmap.LoadBitmap(IDB_BOFANG2); 
			bitmap.GetObject (sizeof(BITMAP),&bmp); 
			memDC.CreateCompatibleDC (&dc); 
			memDC.SelectObject (bitmap); 
			dc.BitBlt (19,200,bmp.bmWidth ,bmp.bmHeight ,&memDC,0,0,SRCCOPY); 
			bitmap.DeleteObject(); 
		} 
	} 
 
	if(isActiveTz==FALSE) 
	{ 
		bitmap.LoadBitmap(IDB_TINGZHI1); 
		bitmap.GetObject (sizeof(BITMAP),&bmp); 
		memDC.CreateCompatibleDC (&dc); 
		memDC.SelectObject (bitmap); 
		dc.BitBlt (57,200,bmp.bmWidth ,bmp.bmHeight ,&memDC,0,0,SRCCOPY); 
		bitmap.DeleteObject(); 
	} 
	else 
	{ 
		bitmap.LoadBitmap(IDB_TINGZHI2); 
		bitmap.GetObject (sizeof(BITMAP),&bmp); 
		memDC.CreateCompatibleDC (&dc); 
		memDC.SelectObject (bitmap); 
		dc.BitBlt (57,200,bmp.bmWidth ,bmp.bmHeight ,&memDC,0,0,SRCCOPY); 
		bitmap.DeleteObject(); 
 
	} 
 
	if(isActiveKt==FALSE) 
	{ 
		bitmap.LoadBitmap(IDB_KUAITUI1); 
		bitmap.GetObject (sizeof(BITMAP),&bmp); 
		memDC.CreateCompatibleDC (&dc); 
		memDC.SelectObject (bitmap); 
		dc.BitBlt (94,200,bmp.bmWidth ,bmp.bmHeight ,&memDC,0,0,SRCCOPY); 
		bitmap.DeleteObject(); 
	} 
	else 
	{ 
		bitmap.LoadBitmap(IDB_KUAITUI2); 
		bitmap.GetObject (sizeof(BITMAP),&bmp); 
		memDC.CreateCompatibleDC (&dc); 
		memDC.SelectObject (bitmap); 
		dc.BitBlt (94,200,bmp.bmWidth ,bmp.bmHeight ,&memDC,0,0,SRCCOPY); 
		bitmap.DeleteObject(); 
	} 
 
 
	if(isActiveKj==FALSE) 
	{ 
		bitmap.LoadBitmap(IDB_KUAIJIN1); 
		bitmap.GetObject (sizeof(BITMAP),&bmp); 
		memDC.CreateCompatibleDC (&dc); 
		memDC.SelectObject (bitmap); 
		dc.BitBlt (132,200,bmp.bmWidth ,bmp.bmHeight ,&memDC,0,0,SRCCOPY); 
		bitmap.DeleteObject(); 
	} 
	else 
	{ 
		bitmap.LoadBitmap(IDB_KUAIJIN2); 
		bitmap.GetObject (sizeof(BITMAP),&bmp); 
		memDC.CreateCompatibleDC (&dc); 
		memDC.SelectObject (bitmap); 
		dc.BitBlt (132,200,bmp.bmWidth ,bmp.bmHeight ,&memDC,0,0,SRCCOPY); 
		bitmap.DeleteObject(); 
	} 
 
 	if(isActiveRe==FALSE) 
	{ 
		bitmap.LoadBitmap(IDB_RETURNYP1); 
		bitmap.GetObject (sizeof(BITMAP),&bmp); 
		memDC.CreateCompatibleDC (&dc); 
		memDC.SelectObject (bitmap); 
		dc.BitBlt (258,183,bmp.bmWidth ,bmp.bmHeight ,&memDC,0,0,SRCCOPY); 
		bitmap.DeleteObject(); 
	} 
	else 
	{ 
		bitmap.LoadBitmap(IDB_RETURNYP2); 
		bitmap.GetObject (sizeof(BITMAP),&bmp); 
		memDC.CreateCompatibleDC (&dc); 
		memDC.SelectObject (bitmap); 
		dc.BitBlt (258,183,bmp.bmWidth ,bmp.bmHeight ,&memDC,0,0,SRCCOPY); 
		bitmap.DeleteObject(); 
	} 
	//音量start------------------------------	 
		    int i=0; 
            cur=(volumeValue/0x33333333); 
			CBrush brush1(RGB(250,174,106));	//Choice adapted one color  
			dc.SelectObject(&brush1); 
			rect.left=193; 
			rect.top=212-i;                     //100; 
			rect.right=0; 
			rect.bottom=213+8; 
            for(i=0;i<6;i++,cur--){ 
				if(cur>=0) { 
				CBrush brush1(RGB(250,174,106));	//Choice adapted one color  
			    dc.SelectObject(&brush1); 
				} 
				else{ 
				CBrush brush1(RGB(0,250,250));	//Choice adapted one color  
			    dc.SelectObject(&brush1);		 
				} 
				rect.left++; 
				rect.top=212-i;                     //100; 
				rect.right=rect.left+8; 
				rect.bottom=213+8; 
				dc.Rectangle(&rect); 
				rect.left=rect.right; 
			}		 
 
 
 
//当前播放时间 
	dc.SetTextColor(RGB(104,149,10)); 
 
	//差值修复,例共219秒的歌慢13秒,每秒慢13/219 
	delValue=13.0/219.0*(curTime/10/1000/1000); 
 
	str.Format(_T("%02d"),(curTime/10/1000/1000+delValue)/60); 
	dc.DrawText(str,CRect(20,155,100,178),0); 
	dc.DrawText(":",CRect(20+20,155,100,178),0); 
	str.Format(_T("%02d"),(curTime/10/1000/1000+delValue)%60); 
	dc.DrawText(str,CRect(20+20+10,155,100,178),0); 
 
 
	if(totalTime!=0) 
	{ 
		cur=((float)curTime+(float)delValue*10000000)/(float)totalTime*(float)188;//当前时间占的进度条 
		rect.left=111;  
		rect.top=166; 
		rect.right=111+cur; 
		rect.bottom=171; 
		CBrush brush(RGB(104,149,10)); 
		dc.FillRect(&rect,&brush); 
	} 
 
//	str.Format(_T("%f"),g_Len); 
//	dc.DrawText(str,CRect(100,155,310,178),0); 
//	dc.DrawText(":",CRect(255+20,155,310,178),0); 
//	str.Format(_T("%02d"),totalTime/10/1000/1000%60); 
//	dc.DrawText(str,CRect(255+20+10,155,310,178),0); 
 
} 
 
void CPlayDlg::OnLButtonDown(UINT nFlags, CPoint point)  
{ 
	// TODO: Add your message handler code here and/or call default 
	 
	if(PtInRect(CRect(19,200,19+26,200+26),point)) 
	{//播放 
		if(isActiveBf==FALSE) 
		{ 
			isActiveBf=TRUE; 
			InvalidateRect(CRect(19,200,19+26,200+26),FALSE); 
		} 
	} 
	else if(PtInRect(CRect(57,200,57+26,200+26),point)) 
	{//停止 
		if(isActiveTz==FALSE) 
		{ 
			isActiveTz=TRUE; 
			InvalidateRect(CRect(57,200,57+26,200+26),FALSE); 
		} 
	} 
	else if(PtInRect(CRect(94,200,94+26,200+26),point)) 
	{//快退 
		if(isActiveKt==FALSE) 
		{ 
			isActiveKt=TRUE; 
			InvalidateRect(CRect(94,200,94+26,200+26),FALSE); 
		} 
	} 
	else if(PtInRect(CRect(132,200,132+26,200+26),point)) 
	{//快进 
		if(isActiveKj==FALSE) 
		{ 
			isActiveKj=TRUE; 
			InvalidateRect(CRect(132,200,132+26,200+26),FALSE); 
		} 
	} 
 
	else if(PtInRect(CRect(258,183,258+50,183+50),point)) 
	{//返回 
		if(isActiveRe==FALSE) 
		{ 
			isActiveRe=TRUE; 
			InvalidateRect(CRect(258,183,258+65,183+65),FALSE); 
		} 
	} 
	else if(PtInRect(CRect(187,203,240,250),point)) 
	{//音量调节 
		if(isActiveVol==FALSE) 
		{ 
			isActiveVol=TRUE; 
		    volumeValue=((point.x-193)/8)*0x33333333; 
			if(volumeValue>=0xffffffff) volumeValue=0xffffffff; 
            waveOutSetVolume(0,volumeValue); 
			InvalidateRect(CRect(187,203,246,250),FALSE); 
		} 
	} 
	else if(PtInRect(CRect(110,160,110+190,175),point)) 
	{//播放进度调节 
		//进度条上每个象素点表示的时间,totalTime/188 
 
		int cur,delValue; 
		delValue=13.0/219.0*(curTime/10/1000/1000); 
		cur=111+((float)curTime+(float)delValue*10000000)/(float)totalTime*(float)188;//当前时间占的进度条 
 
			//根据前面的算法解方程 
		curTime= ((float)point.x-111.0)  /  ((1.0+13.0/219.0)/(float)totalTime*188.0 ); 
 
 
		m_pMediaSeeking->SetPositions(&curTime,AM_SEEKING_AbsolutePositioning, NULL, 0); 
		m_pMediaControl->Run();  
		 
	} 
 
	CDialog::OnLButtonDown(nFlags, point); 
} 
 
void CPlayDlg::OnLButtonUp(UINT nFlags, CPoint point)  
{ 
	// TODO: Add your message handler code here and/or call default 
	CString str; 
 
 
	if(isActiveBf==TRUE) 
	{//播放 
		isActiveBf=FALSE; 
		if(cursel<0) 
		{ 
			InvalidateRect(CRect(0,0,320,240),FALSE); 
			return; 
		} 
		else 
		{ 
			if(isPlay==FALSE) 
			{ 
				isPlay=TRUE; 
				InvalidateRect(CRect(0,0,320,240),FALSE); 
 
				if(m_pMediaControl != NULL && pauseStatus==FALSE) 
				{//播放过没有停止的 
					m_pMediaControl->Stop(); 
					Wavpath=""; 
					m_pMediaControl->Release();  
					// 释放对象  
					m_pGraph-> Release();    
					// 程序结束时调用  
					m_pMediaSeeking->Release(); 
					g_pMediaPosition->Release(); 
					CoUninitialize();  
				} 
 
				if(pauseStatus==TRUE) 
				{//如果是暂停状态开始播放 
					pauseStatus=FALSE; 
					m_pGraph->QueryInterface(IID_IMediaControl, (void **)&m_pMediaControl); 
					m_pMediaControl->Run();  
				} 
				else 
				{ 
					CoInitialize(NULL);  
					CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC,IID_IGraphBuilder,(void **)&m_pGraph);  
					m_pGraph->QueryInterface(IID_IMediaSeeking, (void **)&m_pMediaSeeking); 
 
					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); 
				 
				if(pauseStatus==FALSE) 
				{//如果是新的开始 
					SetTimer(1,1000,NULL); 
				} 
 
			} 
			else 
			{//暂停 
				pauseStatus=TRUE; 
				isPlay=FALSE; 
				InvalidateRect(CRect(0,0,320,240),FALSE); 
 
				if(m_pMediaControl != NULL) // isplaying 
				{ 
					m_pMediaControl->Pause();  
				}  
			} 
		} 
	} 
 
	 
	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); 
}