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

📄 playdlg.cpp

📁 CE导航界面。 CE导航界面。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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(); 
				} 
			}
		}
	}

⌨️ 快捷键说明

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